将字典值转换为不同的列表 - 字典值是元组 - Python

时间:2015-12-15 15:12:08

标签: python list dictionary tuples

我有以下字典:

{'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

有人可以帮忙吗?

4 个答案:

答案 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