Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将字典值转换为不同的列表-字典值是元组-Python_Python_List_Dictionary_Tuples - Fatal编程技术网

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

将字典值转换为不同的列表-字典值是元组-Python,python,list,dictionary,tuples,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')...} 我想创建一个函数,以按日期(字典键)对其进行正确排序,然后将元组的项拆分到不同的列表中,将元组的每个索引合并到同一个列表中(一个列表中的所有第一个项,另一个列表中的所有第二个项,依此类推)。请注意,列表的数量必须与元组项目的数量相同,

我有以下字典:

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

有人能帮忙吗?

你不需要像这样搞砸,只需使用
dict.values()
访问dict值,使用
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']]
如果要根据日期进行排序,可以使用
datetime.strtime()
函数将字符串日期转换为datetime,并根据此字段对dict项目进行排序,然后使用zip获取列:

>>> from datetime import datetime
>>> zip(*[j for i,j in sorted(d.items(),key = lambda x:datetime.strptime(x[0],'%Y-%m-%d'))])
[('32', '32', '62'), ('10', '10', '46'), ('78', '79', '67'), ('69', '78', '54')]

与Kasramvd相同,但按日期排序

zip(*(dct[i] for i in sorted(dct)))

编辑:我认为这与@pacholik的基本相同。他先到那里

[list(z) for z in zip(*[d[key] for key in sorted(d.keys(), reverse=True)])]

不幸的是,我无法将这些漂亮的解决方案付诸实施(我是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

列表应该如何排序?它们应该按日期排序,这是字典的关键。我可以确认
列表3
应该是
[67,79,78]
列表4
应该是
[54,78,69]
?@Ogaday刚刚更正了列表,它们排序错误,对此表示抱歉。它们不应该按相反的方式排序,而是按正常的顺序。我认为这是按值排序,而不是按日期排序。他希望嵌套的列表元素按照各自键的日期进行排序。@day是的,似乎是这样。Tanks for attention.TypeError:“dict”对象的描述符“values”需要一个参数顺便说一句,列表排序错误,很抱歉@Kasramvd。刚刚纠正了它。它不应该以相反的方式,而是以常规的sort.AttributeError:“tuple”对象没有属性“keys”,它在python 3.4和python 2.7中都适用。我犯的一个错误是违反了内置的
dict
。哦,顺便说一句,列表排序错误,很抱歉@pacholik。刚刚纠正了它。它不应该以相反的方式,而是以常规排序。
dct
与您提供的dict类似。好的,只需删除
reverse=True