Fed*_*rer 180 python dictionary list
可能重复:
如何将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 = ""
Run Code Online (Sandbox Code Playgroud)
这是我的尝试......但我无法弄清楚什么是错的?
Bjö*_*örn 396
dict.items()
Run Code Online (Sandbox Code Playgroud)
诀窍.
Aks*_*lén 177
在Python中,可以轻松地从dict转换为list.三个例子:
>> d = {'a': 'Arthur', 'b': 'Belling'}
>> d.items()
[('a', 'Arthur'), ('b', 'Belling')]
>> d.keys()
['a', 'b']
>> d.values()
['Arthur', 'Belling']
Run Code Online (Sandbox Code Playgroud)
Dav*_*ebb 135
你的问题是你有key
和value
引号使它们成为字符串,即你设置aKey
包含字符串"key"
而不是变量的值key
.此外,您没有清除temp
列表,因此您每次都要添加它,而不是只有两个项目.
要修复代码,请尝试以下操作:
for key, value in dict.iteritems():
temp = [key,value]
dictlist.append(temp)
Run Code Online (Sandbox Code Playgroud)
你并不需要将循环变量拷贝key
,并value
在使用前到另一个变量所以我放弃了出来.类似地,您不需要使用append来构建列表,您可以在方括号之间指定它,如上所示.我们可以做的dictlist.append([key,value])
,如果我们想尽可能简短.
或者只是dict.items()
按照建议使用.
Sha*_*hay 53
你应该用dict.items()
.
以下是针对您的问题的单线解决方案:
[(k,v) for k,v in dict.items()]
Run Code Online (Sandbox Code Playgroud)
结果:
[('Food', 'Fish&Chips'), ('2012', 'Olympics'), ('Capital', 'London')]
Run Code Online (Sandbox Code Playgroud)
或者你可以做
l=[]
[l.extend([k,v]) for k,v in dict.items()]
Run Code Online (Sandbox Code Playgroud)
对于:
['Food', 'Fish&Chips', '2012', 'Olympics', 'Capital', 'London']
Run Code Online (Sandbox Code Playgroud)
Mar*_*llo 33
>>> a = {'foo': 'bar', 'baz': 'quux', 'hello': 'world'}
>>> list(reduce(lambda x, y: x + y, a.items()))
['foo', 'bar', 'baz', 'quux', 'hello', 'world']
Run Code Online (Sandbox Code Playgroud)
解释一下:a.items()返回一个元组列表.将两个元组一起添加使得一个元组包含所有元素.因此,缩减创建一个包含所有键和值的元组,然后列表(...)从中生成一个列表.
sth*_*sth 21
可能你只想要这个:
dictList = dict.items()
Run Code Online (Sandbox Code Playgroud)
你的方法有两个问题.对于一个使用key
和value
引号,这是用字母"关键"和"价值",不涉及名称的变量字符串.此外,您继续向"临时"列表添加元素,并且永远不会删除之前迭代中已存在的旧元素.确保temp
每次迭代都有一个新的空列表并使用key
和value
变量:
for key, value in dict.iteritems():
temp = []
aKey = key
aValue = value
temp.append(aKey)
temp.append(aValue)
dictList.append(temp)
Run Code Online (Sandbox Code Playgroud)
另请注意,如果没有临时变量,这可以写得更短,items()
而不是iteritems()
在Python 3中:
for key, value in dict.items():
dictList.append([key, value])
Run Code Online (Sandbox Code Playgroud)
如果你只是制作一个字典来制作一个元组列表,因为创建像你这样的字母可能会很痛苦,你可能会考虑使用zip()
如果你有一个标题和多行,它特别有用.例如,如果我假设你想要国家的奥运会统计数据:
headers = ['Capital', 'Food', 'Year']
countries = [
['London', 'Fish & Chips', '2012'],
['Beijing', 'Noodles', '2008'],
]
for olympics in countries:
print zip(headers, olympics)
Run Code Online (Sandbox Code Playgroud)
给
[('Capital', 'London'), ('Food', 'Fish & Chips'), ('Year', '2012')]
[('Capital', 'Beijing'), ('Food', 'Noodles'), ('Year', '2008')]
Run Code Online (Sandbox Code Playgroud)
不知道这是不是最终目标,也不是我的主题,但这可能是要记住的事情.
归档时间: |
|
查看次数: |
556673 次 |
最近记录: |