我有一个字典,其中包含5个值的元组作为键。例如:
D [i,j,k,g,h] =值。
现在我需要处理具有特定部分密钥对(i1,g1)的所有元素:
我现在需要每对(i1,g1)所有在完整键中都有i == i1和g == g1的值。
什么是pythonic和有效的方法来检索它,知道我需要所有对的元素,每个完整的键只属于一个部分键?
是否有比字典更合适的数据结构?
一个参考实现是:
results = {}
for i in I:
for g in G:
results[i,g] = []
for i,j,k,g,h in D:
if i1 == i and g1 == g:
results[i,g].append(D[i,j,k,g,h])
答案 0 :(得分:0)
假设您知道不同索引的所有有效值,您可以使用itertools.product
获取所有可能的键:
import itertools
I = [3,6,9]
J = range(10)
K = "abcde"
G = ["first","second"]
H = range(10,20)
for tup in itertools.product(I,J,K,G,H):
my_dict[tup] = 0
要限制生成的索引,只需对生成的一个/多个索引设置限制,例如i = 6
所有的键:
itertools.product((6,), J,K,G,H)
一个函数,让您指定希望i==6 and g =="first"
看起来像这样的所有索引:
def partial_indices(i_vals=I, j_vals=J, k_vals=K, g_vals = G, h_vals = H):
return itertools.product(i_vals, j_vals, k_vals, g_vals, h_vals)
partial_indices(i_vals=(6,), g_vals=("first",))
或者假设字典中并非所有这些都存在,您还可以将字典作为参数传递,并在生成密钥之前检查成员资格:
def items_with_partial_indices(d, i_vals=I, j_vals=J, k_vals=K, g_vals = G, h_vals = H):
for tup in itertools.product(i_vals, j_vals, k_vals, g_vals, h_vals):
try:
yield tup, d[tup]
except KeyError:
pass
答案 1 :(得分:-1)
for k,v in D.iteritems():
if i in k and p in k:
print v