我有以下來自python中的一個字典的資料。
我所面臨的問題是,在字典中,空字串作為鍵和值。
data = {'id': '213', 'first_name': 'john', 'last_name': 'doe', '': ''}
我的目標是洗掉空字串key并創建一個沒有它的新字典
所以我試著:
from copy import deepcopy
for x, y in data.items()。
if x == ""/span>:
del data[x] 。
new_data = deepcopy(data)
print(new_data)
但是由于某些原因,我得到了以下錯誤
。...
for x, y in data.items()。
RuntimeError: dictionary changed size during iteration.
我錯過了什么嗎?
uj5u.com熱心網友回復:
由于你已經創建了一個深拷貝,你可以通過簡單地迭代鍵并使用if條件洗掉不必要的鍵而受益。
嘗試一下 -
new_dict = {k:v for k,v in data. items() if k!=''/span>}。
print(new_dict)
{'id': '213'/span>, 'first_name'/span>: 'john', 'last_name': 'doe'}。
正如錯誤追蹤很清楚地提到的,以下代碼中出現錯誤的原因是你在迭代程序中修改了字典。
for x, y in data.items():
if x == ""/span>:
del data[x] #<----:
相反,正如其他一些優秀的答案(@tituszban)所提到的,你應該直接使用del data['']/code>。
uj5u.com熱心網友回復:
你不能在迭代一個專案的時候洗掉它。但你為什么要這樣做呢?你確切地知道你要洗掉的鍵:
你知道你要洗掉的是什么?
del data[""/span>]
這將就地修改data。如果你想保留原來的字典,并創建一個沒有鍵的新字典,請參閱 @Akshay Sehgal 的答案
uj5u.com熱心網友回復:
這個錯誤很直接:你不能在對字典(或一般的集合)進行迭代時從其中洗掉元素。
更好的方法可能是在其他地方存盤你想要洗掉的專案,然后在迭代之后將它們全部洗掉,而不是在迭代本身中嘗試修改 dict。
特別是,對于你的情況,你可以簡單地做這樣的事情,這將從 dict 中洗掉鍵(如果它存在的話):
del data[""/span>]
而不是在整個字典上迭代,因為根據定義,一個字典對任何鍵最多只能有一個條目。
uj5u.com熱心網友回復:
為了擴展hoodakaushal的答案,你可以嘗試這樣做
from copy import deepcopy
to_delete =[]
for x, y in data.items()。
if x == ""/span>:
to_delete.append(x)
for key in to_delete:
del data[key].
new_data = deepcopy(data)
print(new_data)
uj5u.com熱心網友回復:
如果想從字典中提取資料,你也可以像這樣嘗試
data = {'id'/span>: '213'/span>, 'first_name'/span>: 'john', 'last_name': 'doe', '': ''}。
for i, j in data.items() 。
if i and j != "":
print(i, " ", j) # You can add String comment[/span
print(i, j) #不添加注釋的額外例子。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/311391.html
標籤:
下一篇:給出兩個串列,單詞和定義。我們需要創建一個叫做cooldictionary的字典,我們用單詞作為鍵,用定義作為值。
