将字典转换为列表?

我正在尝试将Python字典转换为Python列表,以便执行一些计算。

#My dictionary
dict = {}
dict['Capital']="London"
dict['Food']="Fish&Chips"
dict['2012']="Olympics"


#lists
temp = []
dictList = []


#My attempt:
for key, value in dict.iteritems():
aKey = key
aValue = value
temp.append(aKey)
temp.append(aValue)
dictList.append(temp)
aKey = ""
aValue = ""

这是我的尝试……但我不知道是怎么回事?

1038833 次浏览
dict.items()

很管用。

你的问题是你有keyvalue引号使它们成为字符串,即你设置aKey包含字符串"key",而不是变量key的值。此外,你没有清空temp列表,所以你每次都在其中添加,而不是只在其中有两个项目。

要修复代码,可以尝试以下方法:

for key, value in dict.iteritems():
temp = [key,value]
dictlist.append(temp)

在使用循环变量keyvalue之前,不需要将它们复制到另一个变量中,因此我将它们删除了。类似地,您不需要使用append来构建列表,只需在方括号之间指定它,如上面所示。如果我们想要尽可能简洁,我们本可以做dictlist.append([key,value])

或者直接使用dict.items()

 >>> a = {'foo': 'bar', 'baz': 'quux', 'hello': 'world'}
>>> list(reduce(lambda x, y: x + y, a.items()))
['foo', 'bar', 'baz', 'quux', 'hello', 'world']

a.items()返回一个元组列表。将两个元组加在一起会得到一个包含所有元素的元组。因此,约简创建了一个包含所有键和值的元组,然后list(…)从中生成一个列表。

也许你只是想要这样:

dictList = dict.items()

你的方法有两个问题。例如,你在引号中使用keyvalue,它们是字母“key”和“value”的字符串,与这些名称的变量无关。此外,您还可以不断向“临时”列表中添加元素,并且永远不会删除之前迭代中已经存在的旧元素。确保在每次迭代中都有一个新的空temp列表,并使用keyvalue变量:

for key, value in dict.iteritems():
temp = []
aKey = key
aValue = value
temp.append(aKey)
temp.append(aValue)
dictList.append(temp)

还要注意,如果没有临时变量,这可以写得更短(并且在Python 3中使用items()而不是iteritems()):

for key, value in dict.items():
dictList.append([key, value])

你应该使用dict.items()

这里有一个简单的解决方案:

[(k,v) for k,v in dict.items()]

和结果:

[('Food', 'Fish&Chips'), ('2012', 'Olympics'), ('Capital', 'London')]

或者你可以

l=[]
[l.extend([k,v]) for k,v in dict.items()]

:

['Food', 'Fish&Chips', '2012', 'Olympics', 'Capital', 'London']

如果创建字典只是为了创建元组列表,因为像您这样创建字典可能很麻烦,您可能会考虑使用zip()

如果你有一个标题和多行,它特别有用。例如,如果我假设你想要各国的奥运会统计数据:

headers = ['Capital', 'Food', 'Year']
countries = [
['London', 'Fish & Chips', '2012'],
['Beijing', 'Noodles', '2008'],
]


for olympics in countries:
print zip(headers, olympics)

给了

[('Capital', 'London'), ('Food', 'Fish & Chips'), ('Year', '2012')]
[('Capital', 'Beijing'), ('Food', 'Noodles'), ('Year', '2008')]

不知道这是否是我们的最终目标,也不知道我是不是跑题了,但这可能是需要记住的事情。

在Python中,从dict转换为list很容易。三个例子:

>> d = {'a': 'Arthur', 'b': 'Belling'}


>> d.items()
[('a', 'Arthur'), ('b', 'Belling')]


>> d.keys()
['a', 'b']


>> d.values()
['Arthur', 'Belling']