Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:按键选择字典项_Python_Python 3.x_Dictionary_Key - Fatal编程技术网

Python:按键选择字典项

Python:按键选择字典项,python,python-3.x,dictionary,key,Python,Python 3.x,Dictionary,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 w

我有这本字典:

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, val in a.items(): # .iteritems() for Python 2.x users
   if key == 'car%s' % (range (4)):
       b[key] = val
print(b)
从上面的字典中,我想创建一个只包含“car%s”的新字典

我正在使用这个(来自另一个问题)

它返回{}

我希望得到:

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)

您从未对验证的密钥执行任何操作,而是打印它们。您需要将它们添加到新词典中:

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

您以错误的方式检查前缀,并且没有存储结果。您可以使用和听写理解来生成结果:

>>> 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')}
您当前的检查不是在格式字符串中插入数字,而是在其中插入
范围
对象,该对象可能不是您期望的结果:

>>> 'car%s'% (range (4))
'carrange(0, 4)'

你对射程(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
开头, 阅读此链接

输出

{'car2': ('med cp', 'med fd', 'safe'), 
'car3': ('low cp', 'high fd', 'safe'), 
'car1': ('high cp', 'low fd', 'safe')}

你只是在打印带有
car
的钥匙,而不是将它们添加到另一本字典中。你比我快了17秒:)