将Python字典转换为列表
可能重复:
如何将Python字典转换为元组列表?
我试图将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 = ""
这是我的尝试…但我不能解决什么是错的?
你的问题是你有引号中的key
和value
使他们string,即你设置aKey
键包含string"key"
而不是variableskey
的值。 另外,你不清除temp
列表,所以你每次都添加它,而不是只有两个项目。
要修复您的代码,请尝试如下所示:
for key, value in dict.iteritems(): temp = [key,value] dictlist.append(temp)
在使用它们之前,您不需要将循环variableskey
和value
复制到另一个variables中,因此我将它们删除。 同样,你不需要使用append来build立一个列表,你可以在方括号中指定它,如上所示。 如果我们希望尽可能简短,我们可以完成dictlist.append([key,value])
。
或者按照build议使用dict.items()
。
dict.items()
诀窍吗?
在Python中,从字典转换为列表变得容易。 三个例子:
>> d = {'a': 'Arthur', 'b': 'Belling'} >> d.items() [('a', 'Arthur'), ('b', 'Belling')] >> d.keys() ['a', 'b'] >> d.values() ['Arthur', 'Belling']
你应该使用dict.items()
。
以下是针对您的问题的单线解决scheme:
[(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']
>>> a = {'foo': 'bar', 'baz': 'quux', 'hello': 'world'} >>> list(reduce(lambda x, y: x + y, a.items())) ['foo', 'bar', 'baz', 'quux', 'hello', 'world']
可能你只是想要这个:
dictList = dict.items()
你的方法有两个问题。 对于你使用key
和value
的引号,这是字母“键”和“价值”,与该名称的variables不相关的string。 此外,您不断添加元素到“临时”列表,永远不会摆脱之前迭代中已有的旧元素。 确保在每次迭代中都有一个新的空列表,并使用key
和value
variables:
for key, value in dict.iteritems(): temp = [] aKey = key aValue = value temp.append(aKey) temp.append(aValue) dictList.append(temp)
还要注意,如果没有临时variables,这可以写得更短:
for key, value in dict.iteritems(): dictList.append([key, value])
如果你只是为了创build一个元组列表而创build一个字典,因为像你这样的创build字典可能是一个痛苦,你可以看看使用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')]
不知道这是否是最终的目标,而我的不在话下,但可能需要记住。