2013-11-27 6 views
3

값으로 목록이있는 사전이 제공됩니다.사전에서 목록 값을 제거하는 방법은 무엇입니까?

myDict = {0: [0, 1, 2], 1: [], 2: [20, 25, 26, 28, 31, 34], 3: [], 4: [0, 1, 2, 3, 4, 7, 10], 5: [], 6: [10, 20, 24]} 

값 목록이 비어 있으면 사전을 삭제할 수 있습니까?

사전을 반복하여 항목을 제거하려고 시도했지만 반복 중에는 사전 크기를 변경할 수 없습니다.

for item in myDict: 
    if myDict[item] == []: 
     print item 
     del myDict[item] 
+0

나는 python을 좋아합니다. 그것은 너무 강력합니다! 질문 주셔서 감사합니다! – John

답변

5

사용 DICT의 이해 : 그것을 반복하면서

>>> myDict = {0: [0, 1, 2], 1: [], 2: [20, 25, 26, 28, 31, 34], 3: [], 4: [0, 1, 2, 3, 4, 7, 10], 5: [], 6: [10, 20, 24]} 
>>> myDict = {k: v for k, v in myDict.items() if v} 
>>> myDict 
{0: [0, 1, 2], 2: [20, 25, 26, 28, 31, 34], 4: [0, 1, 2, 3, 4, 7, 10], 6: [10, 20, 24]} 

사전 항목을 삭제, 추가는 허용되지 않습니다. 그것을 극복하기 위해 키의 사본을 만드십시오. 예를 들어, 다음에서는 키 복사를 얻기 위해 tuple(myDict)을 사용했습니다.

>>> myDict = {0: [0, 1, 2], 1: [], 2: [20, 25, 26, 28, 31, 34], 3: [], 4: [0, 1, 2, 3, 4, 7, 10], 5: [], 6: [10, 20, 24]} 
>>> for item in tuple(myDict): 
...  if myDict[item] == []: 
...   del myDict[item] 
... 
>>> myDict 
{0: [0, 1, 2], 2: [20, 25, 26, 28, 31, 34], 4: [0, 1, 2, 3, 4, 7, 10], 6: [10, 20, 24]} 
0
for k in myDict.keys(): 
    if myDict[k] == []: 
    del myDict[k] 

이 임의의 값이되는 키 빈 어레이를 제거 할 것이다.

+0

+1을 추가했지만 2 칸 들여 쓰기로 인해 제거하려고 결정했습니다 – 6502

+0

이것은 Python 2.x에서는 작동하지만 Python 3.x에서는 작동하지 않습니다. Python 3.x에서 [dict.keys] (http://docs.python.org/3/library/stdtypes.html#dict.keys)는 목록 대신 키의보기를 반환하기 때문입니다. – falsetru

관련 문제