一种保证从无序字典中排序键/值列表的方法?

时间:2013-07-17 19:16:03

标签: python dictionary

我有一本字典,其中包含标题和数据。有没有办法将这些数据分成两个列表,同时保持从字典中提取的顺序?我必须分别处理密钥列表和值列表,然后使用这些列表来构建字符串。

这很重要,因为我将它们分开打印出来,输出必须匹配。列表是否无序而不是输入时无关紧要。只要他们的位置在列表中匹配,就可以了。

以下是表示案例的一个非常简单的示例:

mydict = {'Hello':1, 'World':2, 'Again':3}
keys = mydict.keys()
values = mydict.values()

print 'The list of keys are: %s' % stringify(keys)
print 'The corresponding values are: %s' % stringify(values)

# Output:
> The list of keys are: Hello, Again, World
> The corresponding values are: 1, 3, 2

我知道我可以构建一个有序字典然后获得键/值排序将得到保证,但我也想处理这个案例(非有序字典)。

4 个答案:

答案 0 :(得分:7)

即使您看到对的顺序是任意的,但keys()values() 的输出始终对齐,假设您不修改字典。来自docs

  

如果items(),keys(),values(),iteritems(),iterkeys()和   调用itervalues()而不对其进行干预修改   字典,列表将直接对应。这允许   使用zip()创建(值,键)对:pairs = zip(d.values(),   运行起来也())。同样的关系适用于iterkeys()和   itervalues()方法:pairs = zip(d.itervalues(),d.iterkeys())   为对提供相同的值。另一种创建相同列表的方法   对于(k,v),d.iteritems()]中的对= [(v,k)。

答案 1 :(得分:1)

titles = myDict.keys()
allData = [myDict[t] for t in titles]

这样,titles可能会有一些不可预测的顺序,但allData中的每个元素都是与titles

中相应元素相关的数据

答案 2 :(得分:1)

只需使用items,即可有效地为您提供keysvalues的压缩副本:

items = mydict.items()

print 'The list of keys are: %s' % stringify([key for key, value in items])
print 'The list of values are: %s' % stringify([value for key, value in items])

答案 3 :(得分:1)

不要改变dict,你会没事的。否则,你已经完成的工作只会扭曲:

keys, values = zip(*mydict.items())

哪种感觉比两次操作更“安全”...