[英]Python: select dictionary items by key
我有這本字典:
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”的新字典
我正在使用此代碼段 (來自另一個問題)
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'),
}
我在這里想念什么?
如果要添加其中包含單詞car
鍵,則它將起作用:
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')
}
b = {}
for key in a:
if 'car' in key:
print (key, a[key])
b[key] = a[key]
print(b)
您正在以錯誤的方式檢查前綴,並且沒有存儲結果。 您可以使用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)'
您永遠不會對已驗證的密鑰進行任何操作,而是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')} >>>
這有效:
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')}
您對range(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')}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.