【发布时间】:2015-08-05 20:11:25
【问题描述】:
好的,所以我有一个包含字符串中字符位置的字典,但是,我在字典中有单独的字符串,这使它看起来像这样:
{
'24-35': 'another word',
'10-16': 'content',
'17': '[',
'22': ']',
'23': '{',
'37': ')',
'0-8': 'beginning',
'36': '}',
'18-21': 'word',
'9': '(',
}
我正在尝试按键对该数组进行排序,使其看起来像这样
{
'0-8': 'beginning',
'9': '(',
'10-16': 'content',
'17': '[',
'18-21': 'word',
'22': ']',
'23': '{',
'24-35': 'another word',
'36': '}',
'37': ')'
}
字典是由foreaching通过这个字符串构建的:
'beginning(content[word]{another word})',并在括号处拆分。
我正在尝试使用@Brian 的answer 到this question 对字典进行排序,但是,它按字母顺序排序(因为它们已被转换为字符串)在测距过程中(让它说'0-8'的东西)。
我的问题是:
我该如何转换:
class SortedDisplayDict(dict):
def __str__(self):
return "{" + ", ".join("%r: %r" % (key, self[key]) for key in sorted(self)) + "}"
更具体地说:将key 排序为int(key.split('-')[0]),但仍保留输出范围?
【问题讨论】:
-
只是好奇:为什么不构建字符串同时(甚至不)构建字典?
-
@StefanPochmann,我确实在构建数组时构建了字符串,对于每个字符,如果它不是括号,它就会被添加到变量中,一旦括号进入,或者字符串结束,字符串被推送到字典。
-
@Quill 我会说,您根本不必存储范围,只需存储起始索引。您总是可以通过将字符串的长度添加到起始索引来找到结束索引。
-
@Quill 我不是指最终成为您的字典键的字符串部分。我的意思是您要在此处构建的大字符串。代表整个字典的那个。为什么要按顺序解析这些部分,将它们存储在它们无序的字典中,然后将它们从字典中取出,这样你就必须重新排序它们?为什么不按原始顺序取出零件并直接构建大的最终字符串?
标签: python sorting dictionary