Получить значения из списка кортежей по первому значению - PullRequest
2 голосов
/ 20 марта 2019

Я пытаюсь получить список второго значения внутри каждого списка.

Например, для 'val2':

['xe-1/2/1.322','xe-9/1/2']

Исходный список выглядит примерно так:

l = [('val1', 'ae4.0'),
('val1', 'xe-9/1/7.0'),
('val1', 'xe-1/2/1.1151'),
('val2', 'xe-1/2/1.322'),
('val2', 'xe-9/1/2'),
('val3', 'xe-9/1/2'),
('val3', 'xe-1/2/1'),
('val3', 'xe-1/2/1.748')]

Ответы [ 2 ]

3 голосов
/ 20 марта 2019

Вы можете просто использовать понимание списка и вернуть второй элемент из кортежей, если первый совпадает с val2:

l = [('val1', 'ae4.0'), ('val1', 'xe-9/1/7.0'), ('val1', 'xe-1/2/1.1151'), 
     ('val2', 'xe-1/2/1.322'), ('val2', 'xe-9/1/2'), ('val3', 'xe-9/1/2'), 
     ('val3', 'xe-1/2/1'), ('val3', 'xe-1/2/1.748')]

[i[1] for i in l if i[0] == 'val2']
# ['xe-1/2/1.322', 'xe-9/1/2']
1 голос
/ 20 марта 2019

Вы можете создать словарь с ключами в качестве первого значения:

l = [('val1', 'ae4.0'), ('val1', 'xe-9/1/7.0'), ('val1', 'xe-1/2/1.1151'), 
     ('val2', 'xe-1/2/1.322'), ('val2', 'xe-9/1/2'), ('val3', 'xe-9/1/2'), 
     ('val3', 'xe-1/2/1'), ('val3', 'xe-1/2/1.748')]
s = {}
for elem in l:
    if elem[0] not in s:
        s[elem[0]] = []
    s[elem[0]].append( elem[1])
print(s['val2'])
...