社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

修改python字典的值

the_martian • 5 年前 • 932 次点击  

假设我有这本字典:

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/30329
 
932 次点击  
文章 [ 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}