相关疑难解决方法(0)

如何在迭代时从字典中删除项目?

在迭代它时从Python中删除字典中的项是否合法?

例如:

for k, v in mydict.iteritems():
   if k == val:
     del mydict[k]
Run Code Online (Sandbox Code Playgroud)

我们的想法是从字典中删除不符合某个条件的元素,而不是创建一个新字典,该字典是被迭代的字典的子集.

这是一个好的解决方案吗?有更优雅/有效的方式吗?

python scripting dictionary

268
推荐指数
7
解决办法
16万
查看次数

如何避免"RuntimeError:字典在迭代期间改变大小"错误?

我用相同的错误检查了所有其他问题,但没有找到有用的解决方案= /

我有一个列表字典:

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)

但是,这给了我运行时错误.我知道你在迭代它时不能在字典中添加/删除元素......这会是什么方法呢?

python dictionary loops list

203
推荐指数
8
解决办法
17万
查看次数

在Python中,我如何循环字典并更改值,如果它等于什么?

如果值为None,我想将其更改为""(空字符串).

我这样开始,但我忘了:

for k, v in mydict.items():
    if v is None:
... right?
Run Code Online (Sandbox Code Playgroud)

python dictionary

67
推荐指数
3
解决办法
10万
查看次数

Python:迭代时将元素添加到列表中

我知道在迭代列表时不允许删除元素,但允许在迭代时将元素添加到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"

python iteration

51
推荐指数
5
解决办法
9万
查看次数

为什么修改迭代序列是不安全的?

修改循环中迭代的序列是不安全的(这只能发生在可变序列类型中,例如列表).如果您需要修改正在迭代的列表(例如,复制所选项目),则必须迭代副本.切片表示法使这特别方便:

   >>> 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']
Run Code Online (Sandbox Code Playgroud)

为什么这样做不安全for x in a

python

18
推荐指数
2
解决办法
3006
查看次数

在Python中使用None值删除字典中的键的正确方法

None在Python中使用value ==从字典中删除键的正确方法是什么?

python dictionary

18
推荐指数
2
解决办法
2万
查看次数

如果项目的长度小于或等于1,则从字典中删除项目

有没有一种方法可以使用字典的索引位置(如果有的话)从字典中删除键,而不是使用实际的键(避免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)

但是,如何避免使用键,例如改用索引位置,或者如何找出键,以便将其删除?

python dictionary

5
推荐指数
1
解决办法
694
查看次数

对Python字典值执行操作并将新变量添加到字典中

给定一个字典,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)

但无法弄清楚如何将其存储在字典中.

python dictionary python-3.x

0
推荐指数
1
解决办法
474
查看次数

标签 统计

python ×8

dictionary ×6

iteration ×1

list ×1

loops ×1

python-3.x ×1

scripting ×1