如何对键进行排序:按列表中的值列出字典?

时间:2015-12-06 09:52:51

标签: python sorting dictionary

我有一本字典

mydict = {'name':['peter', 'janice', 'andy'], 'age':[10, 30, 15]}

如何根据key ==“name”列表对此词典进行排序?

最终结果应为:

mydict = {'name':['andy', 'janice', 'peter'], 'age':[15, 30, 10]}

或者字典是否是这种数据的错误方法?

5 个答案:

答案 0 :(得分:9)

如果您操纵数据,通常有助于每列成为观察变量(名称,年龄),每行都是观察(例如抽样人员)。有关此PDF link

整洁数据的更多信息
  

糟糕的程序员担心代码。优秀的程序员担心   数据结构及其关系--Linus Torvalds

字典列表更适合这样的操作。下面我介绍一个适合初学者的片段来整理你的数据。一旦拥有了良好的数据结构,即使对于初学者来说,按任何变量排序也是微不足道的。没有单行Python龚功夫:))

>>> mydict = {'name':['peter', 'janice', 'andy'], 'age':[10, 30, 15]}

让我们先处理更好的数据结构

>>> persons = []
>>> for i, name in enumerate(mydict['name']):
...     persons.append({'name': name, 'age': mydict['age'][i]})
... 
>>> persons
[{'age': 10, 'name': 'peter'}, {'age': 30, 'name': 'janice'}, {'age': 15, 'name': 'andy'}]

现在,这种数据结构更容易处理,类似于"数据帧"在数据分析环境中。让我们按person.name

对其进行排序
>>> persons = sorted(persons, key=lambda person: person['name'])

现在,如果你想

,请将其恢复为您的格式
>>> {'name': [p['name'] for p in persons], 'age': [p['age'] for p in persons]}
{'age': [15, 30, 10], 'name': ['andy', 'janice', 'peter']}

答案 1 :(得分:2)

zip用于制作元组(名称,年龄)

dict = {'name':[], 'age':[]}
for name, age in sorted(zip(mydict['name'], mydict['age'])):
    dict['name'].append(name)
    dict['age'].append(age)

输出:

{'age': [15, 30, 10], 'name': ['andy', 'janice', 'peter']}

答案 2 :(得分:1)

两行版本:

>>> s = sorted(zip(mydict['name'], mydict['age']))
>>> dict([('name', [x[0] for x in s]), ('age', [x[1] for x in s])])
{'age': [15, 30, 10], 'name': ['andy', 'janice', 'peter']}

答案 3 :(得分:0)

您可以使用defaultdict以提高性能)和zip - 首先将person压缩到相应的age然后排序,然后生成defaultdict和词典理解。

from collections import defaultdict
dd= defaultdict(list)
mydict = {'name':['peter', 'janice', 'andy'], 'age':[10, 30, 15]}
d=zip(mydict['name'],mydict['age'])

for i in sorted(d,key=lambda x: x[0]):
    dd['names'].append(i[0])
    dd['age'].append(i[1])
print {k:v for k,v in dd.items()}

输出 -

{'age': [15, 30, 10], 'names': ['andy', 'janice', 'peter']}

答案 4 :(得分:-2)

是的,也许你对词典的态度并不是最好的。在这里你只是将列表存储在一个词典中。但您也可以使用列表来存储这些列表。那几乎是一样的 我首先建议的是dict的词典。

myPeople = {}
myPeople["peter"] = {"age":20, "country" : "USA"}
myPeople["john"] = {"age":30, "country" : "newzealand"}
myPeople["fred"] = {"age":32, "country" : "France"}
# or if you have only one descript per name to store, 
# you may use only a dict
# myPeopleName["peter"] = 20
# myPeopleName["john"] = 30

#then you iterate the dictionnary as before and the result will be print
# out sorted by key

for k in sorted(myPeople.keys()): 
    print myPeople[k]

编辑:我的代码完全错了。并且集合不按键排序值,但保留您在字典中添加的键的顺序。