使用数组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的编号键。
答案 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'字典,这可能是一个可能的解决方案,但没有引用密钥。