2015-02-13 5 views
0

Я знаю, я не могу поместить список в качестве ключа в словаре в Python. Мне нужен массив строк, и для каждой строки мне нужно иметь некоторые значения, которые я могу получить через эту строку. НапримерСписок как ключ в словаре

["string1" : ["string1.1","string1.2","string1.3"], "string2" :["string2.1","string2.2"]] 

И мне нужно перебирать струны (string1, string2) и, например, напечатать второй sub_string (stringX.2), так что я получаю

>>"string1.2","string2.2" 

Что такое лучшее решение для этой проблемы ?

+3

Не просто хотите словарь '{«string1»: [ 'string1. 1 ', ...], ...} '? Список не может быть ключом, но это может быть значение. – jonrsharpe

+0

не лучше ли использовать массив 2d? –

+0

Вы можете использовать кортежи как словарные ключи, но вам все равно не нужны. – Jasper

ответ

0

Используйте Dict:

dictvalue = {"string1" : ["string1.1","string1.2","string1.3"], 
      "string2" : ["string2.1","string2.2"]} 

Вы можете итерацию по клавишам с:

for key in dictvalue: 
    print dictvalue[key][1:2] 

Или просто перебирать значения непосредственно, так как вы, кажется, интересуют только значения без ключей.

for value in dictvalue.values(): 
    print value[1:2] 

(Использование [1:2] ломтика обозначения защищает нас в случае, если список содержит менее 2 пунктов его).

+0

Пример OP показывает значения с различной длиной - если список содержит менее двух элементов, значение 'value [1: 2]' будет возвращать пустой список, 'значение [1]' будет поднимать IndexError. – PaulMcG

0

Предположим, что ваш словарь:

x = {'string2': ['substr2.1', 'substr2.2'], 'string1': ['substr1.1', 'substr1.2', 'substr1.3']} 

вы можете использовать:

for key in x: 
    print(x[key][1] 

мощность будет:

substr2.2 
substr1.2 
+0

Если вы хотите перебирать ключи в dict, вы можете просто перебирать сам dict, не нужно вызывать 'keys()'. – PaulMcG

+1

Да, вы правы. Обновленный пример. –

0

Если вы хотите, чтобы при заказе ключей использовался упорядоченный дикт. Тогда просто перебирать пункты Dict с помощью Try/за исключением того, чтобы поймать и IndexError и напечатать ключ, если вы получаете ошибку:

from collections import OrderedDict 

od = OrderedDict((k,v) for k, v in (("string1", ["string1.1", "string1.2", "string1.3"]), ("string2", ["string2.1", "string2.2"]))) 

try: 
    for k, v in od.items(): 
     print(k, v[1]) 
except IndexError as e: 
    print("IndexError for key {}".format(k)) 
Смежные вопросы