Python 将单个字典项移动(弹出)到新字典中 [重复]

Python move (pop) single dictionary item into new dictionary [duplicate]

提问人:Kalev Maricq 提问时间:12/17/2019 最后编辑:Kalev Maricq 更新时间:12/17/2019 访问量:3133

问:

我有一本字典,但不知道键或值。我想删除一个元素(不管是哪个元素)并创建一个仅包含该键和值的新字典,在此过程中将其从旧字典中删除。

dict(n 项) -> newdict(1 项) 和 dict(n-1 项)

我尝试过:

  1. newdict=dict.pop()- 对于列表来说可以完美地工作,但对于字典来说,它是 1。需要一个键,并且只返回一个值,而不是一个新字典或键、值对

  2. newdict={dict.items()[0]}- TypeError:“dict_items”对象不可下标

  3. newdict={dict.keys()[0],dict.pop(dict.keys()[0])}- TypeError:“dict_keys”对象不可下标

  4. key=list(dict)[0] newdict={key,dict.pop(key)}- (终于)有效了,但它们不是比仅仅为了抓取一个键而将整个字典转换为列表更好的方法吗?

有没有更有效的方法可以将单个字典元素移动到新字典中?

编辑:将单个元素作为元组也可以。我只需要我删除的元素的键和值。

评论

0赞 Raj 12/17/2019
您可以使用它来获取单个元素的键,并使用它来删除和添加到 。next(iter(old_dict))old_dictnew_dict
0赞 Kalev Maricq 12/17/2019
@Georgy 是的,事实证明确实如此,尽管我之前看过这个问题,并认为它只会帮助访问,而不是删除。Izaak下面的回答也回答了我的问题。
0赞 Kalev Maricq 12/17/2019
我继续投票关闭,尽管我确实认为其他希望弹出/删除而不是访问的人也可能错过另一个问题的答案。

答:

0赞 Ramon Medeiros 12/17/2019 #1

您可以迭代

for key, value in dict.items():
    if value == bla:
        dict.pop(key)
1赞 manuhortet 12/17/2019 #2

尝试:

for key, value in old_dict:
    new_dict[key] = old_dict.pop(key)
    # operate with new_dict

评论

1赞 Izaak van Dongen 12/17/2019
嘿,你好!我想也许你对这些迹象有点过分热心(只有一个就可以了)=:)
2赞 Kalev Maricq 12/17/2019
我的函数基本上是从任意数量的命名集创建维恩图。顺序无关紧要,集合应该有名称(键),所以字典似乎是显而易见的选择。该函数的操作方式是从字典中删除一个元素,计算 (n-1) 集合的维恩图组,并将新集合与每个集合相交。我是否遗漏了什么,或者这是从字典中弹出元素有用的情况?
0赞 manuhortet 12/17/2019
我认为你是对的,字典似乎是正确的选择。我试图回答“如何从字典中删除一个项目并使用该项目创建一个新项目”的理论问题。知道你在做什么,我认为你可以迭代字典项目。我会更新我的回答,向你展示我的意思。
3赞 Izaak van Dongen 12/17/2019 #3

我认为这是一个很好的用例:dict.popitem

old_dict = {1: 2, 3: 4, 5: 6}
new_dict = {7: 8}

def move_item(old, new):
    k, v = old.popitem()
    new[k] = v

move_item(old_dict, new_dict)
print(old_dict, new_dict)

有结果

{1: 2, 3: 4} {7: 8, 5: 6}