Python:按键选择字典项

新手上路,请多包涵

我有这本字典:

 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'),
}

我在这里错过了什么?

原文由 dya 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 737
2 个回答

如果你想添加包含单词 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)

原文由 Nurjan 发布,翻译遵循 CC BY-SA 3.0 许可协议

您以错误的方式检查前缀并且没有存储结果。您可以使用 str.startswith 和字典理解来生成结果:

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

原文由 niemmi 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏