修改python字典的值

时间:2019-03-23 03:53:45

标签: python dictionary

说我有这本字典:

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

我想用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'

5 个答案:

答案 0 :(得分:2)

您可以使用字典理解:

>>> {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}

答案 1 :(得分:2)

Francisco的回答很好-这就是我要这样做的方式。

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

d.update((k, v if v != 'true' else True) for k,v in d.items())

答案 2 :(得分:1)

Francisco notes一样,对dict的理解将可以用替换的键来创建新的dict。您还可以通过显式循环就地修改dict

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

或通过使用dict理解并用结果更新原始dict

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

通常,第一种方法可能会更快,因为它避免了临时dict,并且甚至不尝试更新键,除非该值是您要替换的"true"字符串。

请注意,在迭代过程中修改dict通常是不安全的,因此如果担心第一个循环,您会被免责。但是在这种情况下,这很好。迭代过程中dict发生变异的危险来自添加或删除键,但是由于您设置的每个键都已经存在于dict中,因此您只在更新现有键的值(是安全/合法的),而不是自己更改密钥集(这会咬你)。

答案 3 :(得分:1)

无需过多修改代码,这是我的建议:

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])

答案 4 :(得分:1)

另一种方法是使用 json.loads 将字符串转换为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}