我有以下字典:
{'2007-10-21': ('32', '10', '78', '69'), '2007-10-28': ('32', '10', '79', '78'), '2011-07-10': ('62', '46', '67', '54')...}
我想创建一个按日期正确排序的函数(字典键),然后将元组的项目拆分到不同的列表中,将元组的每个索引组合在同一个列表中(一个列表中的所有第一项,另一个列表中的所有第二项,依此类推)。请注意,列表的数量必须与元组项目的数量相同,并且列表项目的数量必须在dict中具有相同的元组数量。在上面的例子中,我将有以下正确排序的列表:
List 1: [32,32,62]
List 2: [10,10,46]
List 3: [78,79,67]
List 4: [69,78,54]
我使用的代码是第一个列表,但是它没有创建下一个列表,如下所示:
def dict2manylists(*dicts):
"""
Receives dictionaries with tuples as values and turns it into different lists correctly sorted
:param dic: dictionaries with many different values grouped in touples
:return: different lists correctly sorted
"""
for i in dicts:
sorted_dict=sorted(i.items())
list=[]
for y in range(len(sorted_dict)):
x=0
list.append(sorted_dict[y][1][x])
x+=1
print list
有人可以帮忙吗?
答案 0 :(得分:3)
与Kasramvd相同,但按日期排序。
zip(*(dct[i] for i in sorted(dct)))
答案 1 :(得分:2)
您不需要像这样使用它,只需使用let filePath = (folder as NSString).stringByAppendingPathComponent(_currentHtmlStartPage!)
var url:NSURL=NSURL(fileURLWithPath:filePath)
var request:NSURLRequest=NSURLRequest(URL:url)
webView!.loadRequest(request)
来访问dict值并使用dict.values()
来获取列,然后您可以使用列表推导来循环在列上并对它们进行排序:
zip
如果您想根据日期排序,可以使用>>> d = {'2007-10-21': ('32', '10', '78', '69'), '2007-10-28': ('32', '10', '79', '78'), '2011-07-10': ('62', '46', '67', '54')}
>>> [sorted(x,reverse=True) for x in zip(*d.values())]
[['62', '32', '32'],
['46', '10', '10'],
['79', '78', '67'],
['78', '69', '54']]
函数将字符串日期转换为日期时间,并根据此字段对dict项目进行排序,然后使用zip获取列:
datetime.strptime()
答案 2 :(得分:0)
编辑:我认为这与@ pacholik的基本相同。他先进去了。
[list(z) for z in zip(*[d[key] for key in sorted(d.keys(), reverse=True)])]
答案 3 :(得分:0)
不幸的是,我无法将这些漂亮的解决方案付诸实践(我是Python初学者,由于某些原因它并不适合我,但我确信它们很好,功能性的)。
我找到了一种方法来获得我想要的东西。当然,这不是最优雅的解决方案,但它确实有效:
for i in dicts:
sorted_dict=sorted(i.items())
for item in range(len(sorted_dict[1][1])):
list=[]
for y in range(len(sorted_dict)):
list.append(sorted_dict[y][1][item])
print list