(python)如何使用数组从字典中获取特定条目(使用键)?

时间:2015-12-20 12:38:51

标签: python arrays list dictionary

使用数组x=['A','B','C'],我可以通过声明索引从中获取几个元素:例如。print(x[0:2])产生['A','B']

现在,对于类似的(有序)字典x={1:'A', 2:'B', 3:'C'},我如何获得' A'和' B'以同样的方式,通过引用键1和2?尝试类似于上面数组的方法会给我一个错误:

TypeError: unhashable type: 'slice'

请注意,与条目相关的键非常重要,因此无法帮助将字典转换为列表。

另外,我计划对很多条目(> 100)执行此操作,因此调用每个人都不会有用。例如,我的真实程序将涉及从100开始并且调用键200到300的编号键。

4 个答案:

答案 0 :(得分:4)

从字典中检索值的方法是dict_name[key]

print x[1], x[2]
>> 'A', 'B'

请注意,如果密钥不存在,则会引发KeyError。 解决它的方法是使用get(key, default_value)

print x[9]
>> KeyError
print x.get(9, None)
>> None

您可以使用for循环来检查多个键:

for potential_key in range(10):
    print x[potential_key]

答案 1 :(得分:3)

您可以使用operator.itemgetter

>>> from operator import itemgetter
>>> x = {1:'A', 2:'B', 3:'C'}
>>> itemgetter(1, 2)(x)
('A', 'B')

>>> get_1_2 = itemgetter(1, 2)  # Alternative: Save the result function
>>> get_1_2(x)                  #              call it later
('A', 'B')

答案 2 :(得分:0)

您可以将get()映射到描述所需键的对象,例如range()(其语法和结果类似于切片):

>>> x={1:'A', 2:'B', 3:'C'}
>>> print(*map(x.get, range(1,3)))
A B

或生成器表达式而不是map()

>>> x={1:'A', 2:'B', 3:'C'}
>>> print(*(x.get(item) for item in range(1,3)))
A B

答案 3 :(得分:0)

  

>> list(x.values())[0:2]

这给出了输出:[' A',' B']

既然你提到了'#ordered; ordered'字典,这可能是一个可能的解决方案,但没有引用密钥。