假设我有一个以元组为键的字典,如下所示:
d1 = {}
d1[(111,1)] = "value1111"
d1[(111,2)] = "value1112"
d1[(111,3)] = "value1113"
d1[(112,1)] = "value1121"
d1[(112,2)] = "value1122"
d1[(112,3)] = "value1123"
Run Code Online (Sandbox Code Playgroud)
如何在元组键的第一个元素中获取给定数字的所有值?也就是说111,我希望获得以下内容:
value1111
value1112
value1113
Run Code Online (Sandbox Code Playgroud)
我试过print(d1[(111,i)])但它只返回一个值,有一个简单的方法吗?
提前致谢.
使用列表理解,这样:
[v for k,v in d1.items() if k[0]==111]
Run Code Online (Sandbox Code Playgroud)
条件if k[0]==111表示仅返回d1其键的第一个元素的值111
您也尝试过print(d1[(111,i)],如果您可以控制键元组的第二个元素的范围和类型,那将会起作用,即:
>>> [d1[(111,i)] for i in range(1,4)]
['value1111', 'value1112', 'value1113']
Run Code Online (Sandbox Code Playgroud)
在你的例子中,我们知道i只能从1到3,range(1,4)但是如果你不知道什么是范围i甚至是什么类型i,那么列表理解就是你最好的朋友.
当然,可以获取key元组的第二个元素列表,其第一个元素是111这样做的:
>>>my_filter = [k[1] for k in d1 if k[0]==111]
[2, 3, 1]
>>>my_list = [d1[(111,i) for i in my_filter]
['value1112', 'value1113', 'value1111']
Run Code Online (Sandbox Code Playgroud)
一个简单的列表理解将成功:
>>> [d1[tup] for tup in d1 if tup[0] == 111]
['value1112', 'value1113', 'value1111']
Run Code Online (Sandbox Code Playgroud)
它说"对于tup字典中的每个键,如果键的第一个元素是111,则给我相应的值".