繁体   English   中英

在PYTHON 2.7中使用FOR IN和字典

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM