Лучший способ получить много элементов из Python dict - PullRequest
14 голосов
/ 17 марта 2011

Это мой код:

a = dict(aa='aaaa', bb='bbbbb', cc='ccccc', ...)
print(a.pop(['cc', ...]))

, но возникает ошибка.Каков наилучший простой способ получить много элементов из словаря Python?

Ответы [ 5 ]

21 голосов
/ 17 марта 2011

Использование списка понимания:

a = {'key1':'value1','key2':'value2','key3':'value3'}
print [a.pop(key) for key in ['key1', 'key3']]
21 голосов
/ 17 марта 2011

Как насчет простого:

for e in ['cc', 'dd',...]: 
  a.pop(e)
4 голосов
/ 17 марта 2011

Если я правильно понимаю, что вы хотите, это должно сработать:

print [a.pop(k) for k in ['cc', ...]]

Будьте осторожны, потому что pop разрушителен, то есть изменяет ваш словарь.

1 голос
/ 18 июля 2018

Вот строка с одной строкой, которая будет работать с произвольным длинным словарем, для этого точного случая:

print([a.pop(key) for key in list(a.keys()) if key >= 'cc'])

Для иллюстрации:

a = dict(aa='aaaa', bb='bbbbb', cc='ccccc', dd='ddddd', ee='eeeee')
print([a.pop(key) for key in list(a.keys()) if key >= 'cc']) # => ['ccccc', 'ddddd', 'eeeee']
print(a) # => {'aa': 'aaaa', 'bb': 'bbbbb'}

Примечание : он будет работать до тех пор, пока ключи словаря «увеличиваются» следующим образом: aa, bb, cc, dd, ee, ff, ...

0 голосов
/ 17 марта 2011
a={'aa':'aaaa','bb':'bbbbb','cc':'ccccc'}
remove = ['aa', 'cc']
newA = dict([(k, v) for k,v in a.items() if k not in remove])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...