2012-10-27 2 views
0

Скажем, у меня есть defaultdict со значениями:Доступ к конкретным питон defaultdict

x = defaultdict(int) 
x[a,1] = 1 
x[a,2] = 2 
x[a,3] = 3 
x[b,1] = 4 
x[b,2] = 5 
x[b,3] = 6 
x[c,1] = 7 
x[c,2] = 8 
x[c,3] = 9 

Как получить доступ только те элементы, с первым индексом как с

Или, скорее, как мне реализовать что-то вроде этого:

for key2 in x[,c]: 
    print key2 

ответ

0

Defaultdicts, как обычные дикты, не имеют каких-либо специальных операций нарезания ключей. Ключи - это просто объекты, и в вашем случае они всего лишь кортежи. Дикт не знает и не делает ничего о внутренней структуре ключей. (Можно иметь разные ключи разной длины, например.) Самый простой способ получить то, что вы хотите, это:

for key in x.keys(): 
    if key[0] == 'c': 
     print key, x[key] 

Другая возможность состоит в том, чтобы вместо того, чтобы использовать defaultdict из defaultdicts, и доступ к элементам, как x['c'][1] ,

0

Вы также можете использовать следующее, то есть немного быстрее на моем компьютере: Кроме того, я не знаю вашу usecase, но выбранная вами структура данных не особенно эффективна для запроса.

for i,e in x: 
    if i=='c': 
     print (i,e),x[(i,e)] 

Тест:

def func1(): 
    for key in x.keys(): 
     if key[0] =='c': 
      return key, x[key] 
def func2(): 
    for i,e in x: 
     if i=='c': 
      return (i,e),x[(i,e)] 



timeit func1() 

100000 loops, best of 3: 1.9 us per loop 


timeit func2() 
1000000 loops, best of 3: 1.56 us per loop