2015-11-25 4 views
0

У меня есть словарь в следующем формате:Повторяющиеся значения в словаре Python

{ 'a' : [1], 'b' : [1,2,3], 'c' : [1,1,2], 'd' : [2,3,4] } 

и я хочу, чтобы создать список ключей, которые имеют «1» в своих значениях.

Так что мой список результат должен выглядеть следующим образом:

['a','b','c','c'] 

Я не могу понять, как работать с повторяющимися значениями. Любые идеи, как я могу получить такой список?

+0

Loop по списку в собственность. Каждый раз, когда вы видите '1', добавьте имя свойства к результату. – Barmar

ответ

5

Вы можете использовать списочные

>>> d = { 'a' : [1], 'b' : [1,2,3], 'c' : [1,1,2], 'd' : [2,3,4] } 
>>> [key for key, values in d.items() for element in values if element==1] 
['c', 'c', 'b', 'a'] 

Здесь мы имеем два вложенных для петель в списке нашего понимания. Первая итерация по каждому ключу, пара значений в словаре и второй цикл перебирают по каждому элементу в списке «значение» и возвращают ключ каждый раз, когда этот элемент равен 1. Список результатов неупорядочен, потому что dict неупорядочен, что означает, что нет никаких гарантий относительно порядка элементов.

2

Это использует две петли, k,v in d.items(), который получает каждый (ключ, значение) пару из словаря и n in v который перебирает каждое значение в v:

d = { 'a' : [1], 'b' : [1,2,3], 'c' : [1,1,2], 'd' : [2,3,4] } 
l = [] 
for k,v in d.items(): 
    for n in v: 
     if n == 1: 
      l.append(k) 
l.sort() 

Если вы хотите Однострочник:

l = sorted(k for k,v in d.items() for n in v if n == 1) 
+0

Ваше изменение аннулирует мой ответ, пожалуйста, откат – styvane

+0

Вы сказали, что не знаете, как откат, так зачем откатывать мое редактирование? – styvane

+0

Откат кнопки не было, пока я не обновил страницу. Я перестану делать изменения, теперь вы можете сделать свое. –

2

простой способ: (Python 3)

d = { 'a' : [1], 'b' : [1,2,3], 'c' : [1,1,2], 'd' : [2,3,4] } 
n = 1 
result = [] 
for key, value in d.items(): 
    for i in value.count(n): 
     res.append(key) 

, если вы хотите, отсортированный чем:

result.sort() 
3

Вот один из способов:

>>> x = { 'a' : [1], 'b' : [1,2,3], 'c' : [1,1,2], 'd' : [2,3,4] } 
>>> list(itertools.chain.from_iterable([k]*v.count(1) for k, v in x.iteritems() if 1 in v)) 
['a', 'c', 'c', 'b'] 

При использовании Python 3, используйте items вместо iteritems.

2

Сортировка должна быть сделана в словаре, чтобы получить ожидаемый результат. Это должно работать:

list = [] 
for i in sorted(d.keys()): 
    list+=[i for x in d[i] if x == 1] 
print list 

выход будет:

['a', 'b', 'c', 'c'] 
Смежные вопросы