将Python字典转换为List

时间:2009-11-05 09:34:18

标签: python list dictionary

  

可能重复:
  How can I convert a Python dictionary to a list of tuples?

我正在尝试将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 = ""

这是我的尝试......但我无法弄清楚出了什么问题?

7 个答案:

答案 0 :(得分:371)

dict.items()

诀窍。

答案 1 :(得分:164)

在Python中轻松地从dict转换到列表。三个例子:

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

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

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

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

答案 2 :(得分:123)

您的问题是,引号中有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()

答案 3 :(得分:48)

您应该使用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']

答案 4 :(得分:30)

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

解释:a.items()返回元组列表。将两个元组一起添加使得一个元组包含所有元素。因此,缩减创建一个包含所有键和值的元组,然后列表(...)从中生成一个列表。

答案 5 :(得分:18)

可能你只想要这个:

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])

答案 6 :(得分:5)

如果你只是制作一本字典来制作一个元组列表,因为创建像你这样的字母可能会很痛苦,你可能会考虑使用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')]

不知道这是不是最终目标,也不是我的主题,但可能需要牢记。