Dict部分查找的Python Tulpe键

时间:2016-06-24 16:20:47

标签: python python-2.7 dictionary

我有一个字典,其中包含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])

2 个答案:

答案 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