我有这本词典:
a = {
'car1': ('high cp', 'low fd', 'safe'),
'car2': ('med cp', 'med fd', 'safe'),
'car3': ('low cp', 'high fd', 'safe'),
'taxi1': ('high cp', 'low fd', 'safe', 'med wt'),
'taxi2': ('high cp', 'low fd', 'safe', 'high wt'),
'taxi3': ('high cp', 'low fd', 'safe', 'high wt')
}
从上面的字典中,我想创建一个仅包含'car%s'
的新字典我正在使用此code snippet(来自其他问题)
b = {}
for key in a:
if key == 'car%s'% (range (4)):
print (" %s : %s" % (key, a[key]))
print(b)
返回{}
我希望得到:
a = {
'car1': ('high cp', 'low fd', 'safe'),
'car2': ('med cp', 'med fd', 'safe'),
'car3': ('low cp', 'high fd', 'safe'),
}
我在这里缺少什么?
答案 0 :(得分:2)
如果要在其中添加包含单词@Override
的键,那么它将起作用:
car
答案 1 :(得分:2)
您以错误的方式检查前缀,并且您没有存储结果。您可以使用str.startswith
和dict comprehension来生成结果:
>>> a = {
... 'car1': ('high cp', 'low fd', 'safe'),
... 'car2': ('med cp', 'med fd', 'safe'),
... 'car3': ('low cp', 'high fd', 'safe'),
... 'taxi1': ('high cp', 'low fd', 'safe', 'med wt'),
... 'taxi2': ('high cp', 'low fd', 'safe', 'high wt'),
... 'taxi3': ('high cp', 'low fd', 'safe', 'high wt')
... }
>>> res = {k: v for k, v in a.items() if k.startswith('car')}
>>> res
{'car2': ('med cp', 'med fd', 'safe'), 'car3': ('low cp', 'high fd', 'safe'), 'car1': ('high cp', 'low fd', 'safe')}
不是在格式字符串中插入数字,而是在当前检查中插入range
对象,而这可能不是您期望的结果:
>>> 'car%s'% (range (4))
'carrange(0, 4)'
答案 2 :(得分:1)
您永远不会对您验证的密钥执行任何操作,但print
它们。您需要将它们添加到新词典中:
b ={}
for key, val in a.items(): # .iteritems() for Python 2.x users
if key == 'car%s' % (range (4)):
b[key] = val
print(b)
但是你的代码仍然会被破坏。你需要做一些改变:
"car"
。忘记尝试匹配整个字符串。这整个for循环可以变成一个非常简单的字典理解:
>>> a = {
... 'car1': ('high cp', 'low fd', 'safe'),
... 'car2': ('med cp', 'med fd', 'safe'),
... 'car3': ('low cp', 'high fd', 'safe'),
... 'taxi1': ('high cp', 'low fd', 'safe', 'med wt'),
... 'taxi2': ('high cp', 'low fd', 'safe', 'high wt'),
... 'taxi3': ('high cp', 'low fd', 'safe', 'high wt')
... }
>>> {k: v for k, v in a.items() if k[0:3] == 'car'}
{'car2': ('med cp', 'med fd', 'safe'),
'car3': ('low cp', 'high fd', 'safe'),
'car1': ('high cp', 'low fd', 'safe')}
>>>
答案 3 :(得分:1)
这有效:
new_dict = {}
for k in a.keys():
if 'car' in k:
new_dict[k] = a[k]
结果:
>>new_dict
{'car1': ('high cp', 'low fd', 'safe'),
'car2': ('med cp', 'med fd', 'safe'),
'car3': ('low cp', 'high fd', 'safe')}
答案 4 :(得分:0)
你对范围(4)的期望是什么?
它返回[0, 1, 2, 3]
b = {}
for key in range(4):
new_key = "car%s" % key # generate new_key
item = a.get(new_key)
if item is not None:
b[new_key] = item
print (b)
或者您希望获取的项目仅以car
开头,
阅读此链接
https://docs.python.org/3/library/stdtypes.html#str.startswith
b = {}
for key, value in a.items():
if key.startswith("car"):
b[key] = a[key]
print (b)
输出
{'car2': ('med cp', 'med fd', 'safe'),
'car3': ('low cp', 'high fd', 'safe'),
'car1': ('high cp', 'low fd', 'safe')}