说我有这本字典:
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'
答案 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}