2016-08-22 1 views
0

У меня есть словарь, который показывает поездку одного человека, где пустой список означает прогулку, а список с содержимым - это трубка, которую он взял. Я хочу узнать его первое путешествие по трубе, которое индексируется как «2,3».Найти индекс первой такой же группы, основанный на значении в словаре

specific_path_legs={0: [], 
1: [], 
2: ['Jubilee'], 
3: ['Jubilee'], 
4: [], 
5: [], 
6: ['Metropolitan'], 
7: ['Metropolitan'], 
8: ['Metropolitan'], 
9: ['Metropolitan'], 
10: [], 
11: [], 
12: [], 
13: [], 
14: ['Northern'], 
15: ['Northern'], 
16: ['Northern'], 
17: ['Northern'], 
18: ['Northern'], 
19: [], 
20: [], 
21: [], 
22: ['Jubilee'], 
23: ['Jubilee'], 
24: ['Jubilee'], 
25: [], 
26: [], 
27: []} 

Сначала я исключил часть прогулок и получил словарь с ногами.

legs_nonempty={2: ['Jubilee'], 
    3: ['Jubilee'], 
6: ['Metropolitan'], 
7: ['Metropolitan'], 
8: ['Metropolitan'], 
9: ['Metropolitan'], 
14: ['Northern'], 
15: ['Northern'], 
16: ['Northern'], 
17: ['Northern'], 
18: ['Northern'], 
22: ['Jubilee'], 
23: ['Jubilee'], 
24: ['Jubilee']} 

Затем я попытался

first_leg=[] 
for key,value in specific_path_legs.items(): 
    if value==legs_nonempty.itervalues().next(): 
     first_leg.append(key) 

Но он вернулся

first_leg=[2,3, 22, 23, 24] 

мне нужно только [2,3], а не [2, 3,22, 23, 24]. Есть идеи?

+0

Добавлен ответ. Я предполагаю, что вы хотите наименьшее значение ключа для каждого значения, присутствующего в вашем словаре. –

+0

Пример вывода, который вы хотите, действительно поможет много – Andrew

+0

Надеюсь, на этот раз его легче понять. –

ответ

0
# Sort dictionary based on keys 
import collections 
specific_path_legs = collections.OrderedDict(sorted(specific_path_legs.items())) 

# Store your info in another dict 
path_legs_dict = {} 
for key, value in specific_path_legs.items(): 
    if value and value[0] not in path_legs_dict: 
     path_legs_dict[value[0]] = key 

print path_legs_dict 
# Output: {'Jubilee': 2, 'Northern': 14, 'Metropolitan': 6} 

Я использую collections.OrderedDict, потому что по умолчанию dict объект питона не упорядочена.

0

Поскольку ключи являются возрастающими, начиная от 0 просто идти до тех пор, пока не найдете непустое значение:

for i in range(len(specific_path_legs)): 
    if specific_path_legs[i]: 
     print(i, specific_path_legs[i]) 
     break 

Который даст вам:

(2, ['Jubilee']) 

, если вы хотите, чтобы соответствовать определенное значение также :

for i in range(len(specific_path_legs)): 
    val = specific_path_legs[i] 
    if val and val == "Jubilee": 
     print(i ,specific_path_legs[i] 
     break