Py学习  »  Python

修改python字典的值

the_martian • 5 年前 • 414 次点击  

假设我有这本字典:

my_dicts =  {'key1': 'true', 'key2': 'true'}

我想用 True

我怎么能做到。

我试过这样做:

for t in my_dicts:
    t.update((k, "True") for k, v in t.items() if v == "true")

但我得到这个错误:

AttributeError: 'str' object has no attribute 'update'
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/30324
 
414 次点击  
文章 [ 5 ]  |  最新文章 5 年前
Dinesh
Reply   •   1 楼
Dinesh    5 年前

另一种方法是 JSON负载 将字符串转换为bool类型。

import json
my_dicts =  {'key1': 'true', 'key2': 'true'}

for key, value in my_dicts.items():
    if value == 'true':
        my_dicts[key] = json.loads(value)

print(my_dicts)

输出:

{'key1': True, 'key2': True}
Rick
Reply   •   2 楼
Rick    5 年前

在不过度修改代码的情况下,我的建议是:

my_dicts =  {'key1': 'true', 'key2': 'true'}

for key in my_dicts:
    if my_dicts[key] == 'true': my_dicts[key] = 'True'

print("After:")
for key, value in my_dicts.iteritems():
    print(key + " = " + my_dicts[key])
ShadowRanger
Reply   •   3 楼
ShadowRanger    5 年前

AS Francisco notes A dict 理解将有助于创造新的 双关语 更换钥匙。您也可以修改 双关语 到位,或者使用显式循环:

for k, v in my_dicts.items():
    if v == 'true':
        my_dicts[k] = True

或通过使用 双关语 理解和更新原文 双关语 结果是:

my_dicts.update({k: True if v == 'true' else v for k, v in my_dicts.items()})

第一种方法一般来说可能更快,因为它避免了 双关语 ,并且甚至不会尝试更新密钥,除非该值是 "true" 要替换的字符串。

很明显,这是 正常地 修改不安全 双关语 当你重复它的时候,如果你担心第一个循环的话,你会得到原谅。但在这种情况下,它是好的;突变的危险 双关语 当您迭代时,它来自于添加或删除键,但是由于您设置的每个键都已经存在于 双关语 ,您只更新现有密钥的值(这是安全/合法的),而不更改密钥集本身(这会咬到您)。

booleys1012
Reply   •   4 楼
booleys1012    5 年前

弗朗西斯科的回答很好——这就是我该怎么做。

对于另一个内联解决方案,它是以内联方式修改字典,而不是创建新的字典(如果字典很大,这将很有用):

d.update((k, v if v != 'true' else True) for k,v in d.items())
Francisco Couzo
Reply   •   5 楼
Francisco Couzo    5 年前

您可以使用听写理解:

>>> {key: True if value == 'true' else value for key, value in my_dicts.items()}
{'key1': True, 'key2': True}

其他答案提及使用 dict.update 如果你走这条路,就不需要再建立一个完整的字典,只需要替换那些 value == 'true' :

>>> my_dicts.update({key: True for key, value in my_dicts.items() if value == 'true'})
>>> my_dicts
{'key1': True, 'key2': True}