我有一本字典,其中包含标题和数据。有没有办法将这些数据分成两个列表,同时保持从字典中提取的顺序?我必须分别处理密钥列表和值列表,然后使用这些列表来构建字符串。
这很重要,因为我将它们分开打印出来,输出必须匹配。列表是否无序而不是输入时无关紧要。只要他们的位置在列表中匹配,就可以了。
以下是表示案例的一个非常简单的示例:
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
我知道我可以构建一个有序字典然后获得键/值排序将得到保证,但我也想处理这个案例(非有序字典)。
答案 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
,即可有效地为您提供keys
和values
的压缩副本:
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())
哪种感觉比两次操作更“安全”...