如何在 python 字典中分解多值键



我有字典

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]返回键的第二个值。

最新更新