2

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

这很重要,因为我将它们单独打印出来,并且输出必须匹配。列表是否乱序与输入它们的时间无关。只要他们在列表中的位置匹配,就可以了。

这是一个非常简单的例子来表示这种情况:

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

4 回答 4

7

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

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

于 2013-07-17T19:19:18.300 回答
1

只是不要变异dict,你会没事的。否则,您已经完成的只是一个转折:

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

不知何故,这比两次手术感觉“更安全”……

于 2013-07-17T19:29:37.997 回答
1
titles = myDict.keys()
allData = [myDict[t] for t in titles]

这种方式,titles可能是一些不可预测的顺序,但每个元素都allData将是与相应元素相关的数据titles

于 2013-07-17T19:18:14.280 回答
1

只需使用items,它就可以有效地为您提供keysand的压缩副本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])
于 2013-07-17T19:18:17.850 回答