如何在提取字典子集后保持秩序?

时间:2014-03-18 18:46:23

标签: python dictionary

我想创建一个字典(或列表),它是另一个字典的子集。请看下面的代码:

ThePythons = {
    'GC': 'Graham Chapman',
    'JC': 'John Cleese',
    'EI': 'Eric Idle',
    'MP': 'Michael Palin'
}

query = ['EI', 'JC']

output = {key: value for key, value in ThePythons.items() if key in query}
print(output)

有时输出是:

{'JC': 'John Cleese', 'EI': 'Eric Idle'}

有时是:

{'EI': 'Eric Idle', 'JC': 'John Cleese'}

如何以与查询完全相同的顺序保存(保存)输出?我希望输出始终为:

{'EI': 'Eric Idle', 'JC': 'John Cleese'}

输出也可以是列表类型(<class 'list'>)。例如:

[['EI', 'Eric Idle'], ['JC', 'John Cleese']]

2 个答案:

答案 0 :(得分:2)

字典无序。您必须使用列表推导而不是字典理解来保持顺序:

output = [(key, ThePythons[key]) for key in query]

答案 1 :(得分:1)

您可以使用列表理解迭代列表并从字典中获取项目:

output = [[item,ThePythons[item]] for item in query if item in ThePythons]
print output

输出:

[['EI', 'Eric Idle'], ['JC', 'John Cleese']]

使用地图:

map(lambda x: [x,ThePythons[x]] if x in ThePythons else [x,"Not found"], query)