在迭代它时从Python中删除字典中的项是否合法?
例如:
for k, v in mydict.iteritems():
if k == val:
del mydict[k]
Run Code Online (Sandbox Code Playgroud)
我们的想法是从字典中删除不符合某个条件的元素,而不是创建一个新字典,该字典是被迭代的字典的子集.
这是一个好的解决方案吗?有更优雅/有效的方式吗?
我用相同的错误检查了所有其他问题,但没有找到有用的解决方案= /
我有一个列表字典:
d = {'a': [1], 'b': [1, 2], 'c': [], 'd':[]}
Run Code Online (Sandbox Code Playgroud)
其中一些值为空.在创建这些列表的最后,我想在返回字典之前删除这些空列表.目前我试图这样做如下:
for i in d:
if not d[i]:
d.pop(i)
Run Code Online (Sandbox Code Playgroud)
但是,这给了我运行时错误.我知道你在迭代它时不能在字典中添加/删除元素......这会是什么方法呢?
如果值为None,我想将其更改为""(空字符串).
我这样开始,但我忘了:
for k, v in mydict.items():
if v is None:
... right?
Run Code Online (Sandbox Code Playgroud) 我知道在迭代列表时不允许删除元素,但允许在迭代时将元素添加到python列表中.这是一个例子:
for a in myarr:
if somecond(a):
myarr.append(newObj())
Run Code Online (Sandbox Code Playgroud)
我在我的代码中尝试了这个并且似乎工作正常,但是我不知道是不是因为我很幸运并且它将来会在某个时候破坏?
编辑:我不喜欢复制列表,因为"myarr"很大,因此它太慢了.另外,我需要用"somecond()"检查附加的对象.
编辑:在某些时候"somecond(a)"将是假的,因此不会有无限循环.
编辑:有人问过"somecond()"函数.myarr中的每个对象都有一个大小,每次"somecond(a)"为真,并且一个新对象被附加到列表中,新对象的大小将小于a."somecond()"有一个关于小物体如何的epsilon,如果它们太小,它将返回"false"
修改循环中迭代的序列是不安全的(这只能发生在可变序列类型中,例如列表).如果您需要修改正在迭代的列表(例如,复制所选项目),则必须迭代副本.切片表示法使这特别方便:
Run Code Online (Sandbox Code Playgroud)>>> for x in a[:]: # make a slice copy of the entire list ... if len(x) > 6: a.insert(0, x) ... >>> a ['defenestrate', 'cat', 'window', 'defenestrate']
为什么这样做不安全for x in a?
None在Python中使用value ==从字典中删除键的正确方法是什么?
有没有一种方法可以使用字典的索引位置(如果有的话)从字典中删除键,而不是使用实际的键(避免del d['key']使用例如,而是使用索引位置)从字典中删除键?
如果有的话,也不必理会这个问题的其余部分,因为这也是我在寻找的内容。
因此,作为我的例子,我有字典d,它使用列表作为值:
d = {'acd': ['cad'], 'abd': ['bad', 'dab']}
Run Code Online (Sandbox Code Playgroud)
我想从这样的字典中完全删除每个键,这些字典的值的项目长度小于2(因此,如果只有1个项目)。
因此,在此示例中,我想删除键,'acd'因为它的值列表只有1个项目['cad']。'abd'有2个项目['bad', 'dab'],所以我不想删除它-仅当它包含1个或更少的项目时。这本字典只是一个例子-我正在使用比这更大的版本,并且我需要它来删除所有单个项目值键。
我为测试编写了该代码,但是我不确定如何删除想要的密钥-或确定它们是什么。
d = {'acd': ['cad'], 'abd': ['bad', 'dab']}
index_pos = 0
for i in d.values():
#Testing and seeing stuff
print("pos:", index_pos)
print(i)
print(len(i))
if len(i) < 2:
del d[???]
#What do I do?
index_pos += 1
Run Code Online (Sandbox Code Playgroud)
我使用index_pos是因为我认为它可能有用,但不确定。
我知道我可以使用以下方法从字典中删除一个条目
del d['key']
Run Code Online (Sandbox Code Playgroud)
但是,如何避免使用键,例如改用索引位置,或者如何找出键,以便将其删除?
给定一个字典,d类型{key: (v1,v2)},我想v1,v2对所有键进行分割以产生分数,v3所以我的字典是类型的{key: (v1,v2,v3)}.
我明白我能做到:
for key,v1,v2 in d.items():
score = v1/v2
Run Code Online (Sandbox Code Playgroud)
但无法弄清楚如何将其存储在字典中.