2012-04-29 4 views
4

Например, если у меня есть миллионы записей внутри словаря с формой {(1,2):3,(2,3):4,(3:2):5...xmillion} Это кортеж в качестве ключа и с соответствующим значениемБыстрый доступ к части данных внутри словаря

Что бы хотел бы сделать, это получить данные из которых значение кортежа [1] = 2 Один из моего подхода является

for item, value in dict.iteritems(): 
     if item[1] == 2: 
     Do operations here... 

Это медленный подход, есть лучший алгоритм для этого, чтобы сделать это быстро? нравится .. так что я не должен идти через миллион пунктов

+2

Есть ли у вас гибкость в изменении структуры dict? Хранение его как {1: {2: 3}, 2: {3: 4}} и т. Д. Упростило бы такой доступ. –

+0

Кроме того, вы можете также поддерживать другую хеш-таблицу, чтобы быстро находить поиск, если вам нужны частые поиски. –

+0

@DanielRoseman Вы уверены, что структура, которую вы имеете в виду? OP хочет 'item [1] == 2' not' item [0] == 2'. – katrielalex

ответ

1

В словаре of tuples as key вам должно потребоваться перебрать все ключи, чтобы найти тех, кто с key[1] == 2. Альтернативы решению проблемы нет.

0

Если все, что вам является словарь {(a,b):c} то нет, вы не можете сделать лучше: так как вы не знаете, какой у ключей есть b=2, вы должны посмотреть на них все.

Если вы строите словарь самостоятельно, вы можете разделить кортежи с b=2 на этом этапе, чтобы вам не пришлось искать их снова. Вы можете хранить их в отдельном словаре (только элементы {(a,2):c}) или переписать структуру словаря, который у вас есть (например, {b:{(a,b):c}}).