相关疑难解决方法(0)

在迭代它时修改Python字典

假设我们有一个Python字典d,我们就像这样迭代它:

for k,v in d.iteritems():
    del d[f(k)] # remove some item
    d[g(k)] = v # add a new item
Run Code Online (Sandbox Code Playgroud)

(f并且g只是一些黑盒转换.)

换句话说,我们尝试添加/删除项目,d同时使用迭代它iteritems.

这个定义得很好吗?你能提供一些参考来支持你的答案吗?

(如果它被破坏了,如何解决这个问题非常明显,所以这不是我追求的角度.)

python dictionary

75
推荐指数
5
解决办法
6万
查看次数

从列表中删除项目时出现奇怪的结果

我有这段代码:

numbers = range(1, 50)

for i in numbers:
    if i < 20:
        numbers.remove(i)

print(numbers)
Run Code Online (Sandbox Code Playgroud)

但我得到的结果是:

[2,4,6,8,10,12,14,16,18,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35 ,36,37,38,39,40,41,42,43,44,45,46,47,48,49]

当然我希望结果中没有出现20以下的数字,我假设我在删除时做错了.

python loops list

32
推荐指数
3
解决办法
5844
查看次数

自定义dict,允许在迭代期间删除

更新基于Lennart Regebro的回答

假设您遍历字典,有时需要删除元素.以下是非常有效的:

remove = []
for k, v in dict_.items():
  if condition(k, v):
    remove.append(k)
    continue
  # do other things you need to do in this loop
for k in remove:
  del dict_[k]
Run Code Online (Sandbox Code Playgroud)

这里唯一的开销是构建要删除的键列表; 除非它与字典大小相比变大,否则不是问题.但是,这种方法需要一些额外的编码,所以它不是很受欢迎.

流行的词典理解方法:

dict_ = {k : v for k, v in dict_ if not condition(k, v)}
for k, v in dict_.items():
  # do other things you need to do in this loop
Run Code Online (Sandbox Code Playgroud)

导致完整的字典副本,如果字典变大或经常调用包含函数,则存在愚蠢的性能损失的风险.

更好的方法是仅复制密钥而不是整个字典:

for k in list(dict_.keys()):
  if condition(k, dict_[k]):
    del dict_[k]
    continue
  # do …
Run Code Online (Sandbox Code Playgroud)

python dictionary iterator python-3.x

26
推荐指数
2
解决办法
4634
查看次数

Python字典迭代

我有一本字典dict2,我想通过它删除所有包含某些ID号的条目idlist. dict2[x]是一个列表列表(参见下面的示例dict2).这是我到目前为止编写的代码,但是它不会删除所有ID(entry[1])的实例idlist.有帮助吗?

dict2 = {G1:[[A, '123456', C, D], [A, '654321', C, D], [A, '456123', C, D], [A, '321654', C, D]]}

idlist = ['123456','456123','321654']
for x in dict2.keys():
    for entry in dict2[x]:
        if entry[1] in idlist:
            dict2[x].remove(entry)
        if dict2[x] == []:
            del dict2[x]
Run Code Online (Sandbox Code Playgroud)

dict2 应该看起来像这样:

dict2 = {G1:[[A, '654321', C, D]]}
Run Code Online (Sandbox Code Playgroud)

python dictionary

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

RuntimeError:迭代过程中突变的OrderedDict(Python3)

得到标题中提到的错误。下面提到的函数由通过POST api调用的另一个函数调用。

错误位于打印语句下方的行上。不知道错误的含义以及为什么会出现。用于一周前运行的相同代码。

def remove_individual_stops(ordered_parkstop_dict, relevant_data):
    new_ordered_parkstop_dict = ordered_parkstop_dict
    for key, value in ordered_parkstop_dict.items():
        if len(value) == 0:
            for k,v in ordered_parkstop_dict.items():
                if key in v:
                    new_ordered_parkstop_dict.pop(key)
        print (type(ordered_parkstop_dict), ordered_parkstop_dict)
        for k,v in ordered_parkstop_dict.items():
            klist = []
            keylist = []
            if value and v:
                if len(v)==1 and len(value)==1:
                    klist.append(k), keylist.append(key)
                if (keylist == v) and (klist == value and len(value) == 1):
                    new_ordered_parkstop_dict.pop(key)
    return new_ordered_parkstop_dict
Run Code Online (Sandbox Code Playgroud)

python python-3.x

6
推荐指数
1
解决办法
4018
查看次数

如何从多维(深度未知)python字典中递归删除某些键?

我在我的一个项目中使用kendoUI Grid。我使用他们的api检索了一段数据,发现它向json / dictionary添加了一些“不需要的”数据。将json传递回我的Pyramid后端后,我需要删除这些键。问题是,字典的深度可以是任意的,而我事先不知道深度。

例:

product = {
    id: "PR_12"
    name: "Blue shirt",
    description: "Flowery shirt for boys above 2 years old",
    _event: {<some unwanted data here>},
    length: <some unwanted data>,
    items: [{_event: {<some rubbish data>}, length: <more rubbish>, price: 23.30, quantity: 34, color: "Red", size: "Large"}, {_event: {<some more rubbish data>}, length: <even more rubbish>, price: 34.50, quantity: 20, color: "Blue", size: "Large"} ....]
}
Run Code Online (Sandbox Code Playgroud)

我要特别删除两个键:“ _ event”和“ length”。我尝试编写一个递归函数来删除数据,但似乎无法正确处理。有人可以帮忙吗?

这是我所拥有的:

def remove_specific_key(the_dict, rubbish):
  for key in the_dict:
    if key …
Run Code Online (Sandbox Code Playgroud)

python

4
推荐指数
2
解决办法
2128
查看次数

标签 统计

python ×6

dictionary ×3

python-3.x ×2

iterator ×1

list ×1

loops ×1