내 사전에서 ‘key’항목을 d
안전하게 제거하는 방법을 알고 있습니다.
if d.has_key('key'):
del d['key']
그러나 사전에서 여러 항목을 안전하게 제거해야합니다. 이 작업을 두 번 이상 수행해야하므로 튜플의 항목을 정의 할 생각이었습니다.
entitiesToREmove = ('a', 'b', 'c')
for x in entitiesToRemove:
if d.has_key(x):
del d[x]
그러나 이것을 수행하는 더 똑똑한 방법이 있는지 궁금합니다.
답변
왜 이렇게하지 :
entries = ('a', 'b', 'c')
the_dict = {'b': 'foo'}
def entries_to_remove(entries, the_dict):
for key in entries:
if key in the_dict:
del the_dict[key]
보다 간결한 버전은 dict.pop ()을 사용하여 mattbornski에 의해 제공되었습니다.
답변
d = {'some':'data'}
entriesToRemove = ('any', 'iterable')
for k in entriesToRemove:
d.pop(k, None)
답변
Dict Comprehensions 사용
final_dict = {key: t[key] for key in t if key not in [key1, key2]}
여기서 key1 및 key2 는 제거됩니다.
아래 예에서 “b”및 “c”키는 제거되고 키 목록에 보관됩니다.
>>> a
{'a': 1, 'c': 3, 'b': 2, 'd': 4}
>>> keys = ["b", "c"]
>>> print {key: a[key] for key in a if key not in keys}
{'a': 1, 'd': 4}
>>>
답변
솔루션은 map
및 filter
기능을 사용 하고 있습니다.
파이썬 2
d={"a":1,"b":2,"c":3}
l=("a","b","d")
map(d.__delitem__, filter(d.__contains__,l))
print(d)
파이썬 3
d={"a":1,"b":2,"c":3}
l=("a","b","d")
list(map(d.__delitem__, filter(d.__contains__,l)))
print(d)
당신은 얻는다 :
{'c': 3}
답변
제거하려는 키에 대한 값도 검색해야한다면 다음과 같이하는 것이 좋습니다.
valuesRemoved = [d.pop(k, None) for k in entitiesToRemove]
물론에서 키를 제거하기 위해서만이 작업을 수행 d
할 수 있지만 목록 이해를 사용하여 값 목록을 불필요하게 생성하게됩니다. 함수의 부작용만을 위해 목록 이해력을 사용하는 것도 약간 불분명합니다.
답변
pop
및 솔루션을 찾았습니다.map
d = {'a': 'valueA', 'b': 'valueB', 'c': 'valueC', 'd': 'valueD'}
keys = ['a', 'b', 'c']
list(map(d.pop, keys))
print(d)
이것의 출력 :
{'d': 'valueD'}
나는 누군가가 똑같은 것을 검색하면 미래에 도움이 될 것이라고 생각하기 때문에이 질문에 너무 늦게 대답했습니다. 그리고 이것은 도움이 될 것입니다.
최신 정보
위 코드는 dict에 키가 없으면 오류가 발생합니다.
DICTIONARY = {'a': 'valueA', 'b': 'valueB', 'c': 'valueC', 'd': 'valueD'}
keys = ['a', 'l', 'c']
def remove_keys(key):
try:
DICTIONARY.pop(key, None)
except:
pass # or do any action
list(map(remove_key, keys))
print(DICTIONARY)
산출:
DICTIONARY = {'b': 'valueB', 'd': 'valueD'}
답변
기존 답변에 문제가 없지만이 솔루션을 찾지 못한 것에 놀랐습니다.
keys_to_remove = ['a', 'b', 'c']
my_dict = {k: v for k, v in zip("a b c d e f g".split(' '), [0, 1, 2, 3, 4, 5, 6])}
for k in keys_to_remove:
try:
del my_dict[k]
except KeyError:
pass
assert my_dict == {'d': 3, 'e': 4, 'f': 5, 'g': 6}