将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 = "" 

这是我的尝试…但我不能解决什么是错的?

你的问题是你有引号中的keyvalue使他们string,即你设置aKey键包含string"key"而不是variableskey的值。 另外,你不清除temp列表,所以你每次都添加它,而不是只有两个项目。

要修复您的代码,请尝试如下所示:

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

在使用它们之前,您不需要将循环variableskeyvalue复制到另一个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() 

你的方法有两个问题。 对于你使用keyvalue的引号,这是字母“键”和“价值”,与该名称的variables不相关的string。 此外,您不断添加元素到“临时”列表,永远不会摆脱之前迭代中已有的旧元素。 确保在每次迭代中都有一个新的空列表,并使用keyvaluevariables:

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

不知道这是否是最终的目标,而我的不在话下,但可能需要记住。