我有字典
my_dict = {
('X', 'A'): 5,
('X', 'B'): 2,
('Y', 'B'): 3,
('Z', 'A'): 3,
('Z', 'C'): 4,
}
我的目标是看看"X"的键是什么。 对于此示例,它应返回 ['A', 'B']。
但是,顺序很重要。因此,"A"应返回 None。
如何分解多值密钥来实现这一点?
如何分解多值键来实现这一点?
为什么不直接有一个 2 级字典?
在你当前的字典中,'X'
不是一个键,并且由于 Python 没有内置的 btree(或其他基于树的映射),因此您无法选择映射子集,但是通过将两级键转换为两级键:
my_dict = {
'X': {
'A': 5,
'B': 2,
},
'Y': {
'B': 3,
},
'Z': {
'A': 3,
'C': 4,
},
}
您得到的正是您所需要的:
- (X, A) 的值位于
my_dict['X']['A']
- Z 的子项位于
my_dict['Z'].keys()
- Y 的所有值(无论键如何)都位于
my_dict['Y'].values()
- 密钥可能丢失?使用
dict.get
例如my_dict.get('A')
=>None
,而my_dict['Y']
=>{'B': 3}
这应该适用于您要实现的目标
my_dict = {
('X', 'A'): 5,
('X', 'B'): 2,
('Y', 'B'): 3,
('Z', 'A'): 3,
('Z', 'C'): 4,
}
array = []
def getPair(value):
for x in my_dict:
if x[0] == value:
array.append(x[1])
return array;
print(getPair('X'))
您可以通过列表解构来实现这一点:
for (key1,key2),value in my_dict.items() :
print(f"{key1},{key2}:{value}")
if key1 == 'X' :
print(f"X paired with {key2}, has value {value}")
如果您只关心密钥:
for key1,key2 in my_dict.keys() :
if key1 == 'X' :
print(f"X paired with {key2}")
在性能方面,它会遍历整个字典键,因此它不是最有效的,但如果您没有庞大的字典并且数据结构是不可避免的,这是可以接受的。
如果您需要更好的性能,请使用 2 层嵌套字典{ key1: {key2 : value , ... }, ... }
构建数据,然后my_dict[key1]
按照 马斯克林。
我找到了解决方案。事实证明,python 中的多值键被保存为数组。因此,您只需使用my_key[0]
返回键的第一个值,my_key[1]
返回键的第二个值。