[英]Using FOR IN and dictionaries in PYTHON 2.7
我正在尝试创建一个随机唯一键的dict()ionary,并将其值作为类对象或其他对象。
问题是,当我使用FOR IN遍历字典时,当我真正想要的是对字典项的引用时,仅给出键名。
让我用代码解释一下:
a = dict()
a['trees'] = dict()
a['trees']['oak'] = 453
a['trees']['pine'] = 12
a['trees']['chestnut'] = 65
for b in a['trees']:
print b
输出为:
橡木松栗
我想要的是:
{'oak':453} {'pine':12} {'chestnut':65}
我试过了:
FOR b in a['trees'].items():
但这会返回带有已复制数据的元组,这意味着我无法更改值并影响字典中的原始项。
我可以这样做:
FOR b in a['trees']:
tree = a['trees'][b]
但这似乎有点漫长,我相信可以在FOR语句中完成。
我肯定我在这里缺少一些简单的东西://感谢您提前告知我们。
从这个问题来看,重点似乎是-
但这会返回带有已复制数据的元组,这意味着我无法更改值并影响字典中的原始项。
正如您所观察到的,当您遍历字典时,您会得到键,而不是子词典(或键/值对)。
您可以使用dict.iteritems()
,然后将值解压缩为key和value,然后使用该值对原始字典进行更改。 范例-
>>> d = {1:2,3:4,5:6}
>>> for key,value in d.iteritems():
... d[key] = value + 1
...
>>> d
{1: 3, 3: 5, 5: 7}
同样,如果访问a['trees'][b]
看起来很长,您可以将对a['trees']
字典的引用分配给较短的变量,然后将其用于您的需求。 范例-
>>> a = dict()
>>> a['trees'] = dict()
>>> a['trees']['oak'] = 453
>>> a['trees']['pine'] = 12
>>> a['trees']['chestnut'] = 65
>>> b = a['trees']
>>> for key,value in b.iteritems():
... b[key] = value + 100
...
>>> a
{'trees': {'chestnut': 165, 'oak': 553, 'pine': 112}}
for b in a['trees']:
print '{\'' + b + '\':' + str(a['trees'][b]) + '}'
输出:
{'chestnut':65}
{'oak':453}
{'pine':12}
我不知道你想要什么,但得到的词典列表a
,你可以使用:
In [14]: [dict((x,)) for x in a['trees'].items()]
Out[14]: [{'chestnut': 65}, {'oak': 453}, {'pine': 12}]
要获得与预期输出匹配的字符串,请尝试:
In [15]: print ' '.join([str(dict((x,))) for x in a['trees'].items()])
{'chestnut': 65} {'oak': 453} {'pine': 12}
这是你的答案
a = dict()
a['trees'] = dict()
a['trees']['oak'] = 453
a['trees']['pine'] = 12
a['trees']['chestnut'] = 65
for b in a:
if a.get("trees"):
print a.items()
可以使用items(),keys()和values()方法从字典创建列表。 顾名思义,方法keys()创建一个列表,该列表仅由字典的键组成。 while values()产生一个由值组成的列表。 items()可用于创建由(键,值)对的2元组组成的列表:
>>> w={"house":"Haus","cat":"Katze","red":"rot"}
>>> w.items()
[('house', 'Haus'), ('red', 'rot'), ('cat', 'Katze')]
>>> w.keys()
['house', 'red', 'cat']
>>> w.values()
['Haus', 'rot', 'Katze']
如果将方法items()应用于字典,则不会丢失任何信息,即可以从由items()创建的列表中重新创建原始字典。 即使此二元组列表具有相同的熵,即信息内容相同,两种方法的效率也完全不同。 字典数据类型提供了访问,删除和更改字典元素的高效方法,而对于列表,这些功能必须由程序员来实现。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.