Removing key/value pair from Dictionary in Python
我对Python很在行。
我正在尝试删除此词典中的所有"noone:0",因此它看起来与下面的相同,但没有任何"noone:0":
1 | G = {'a': {'b': 10, 'c': 8, 'd': 3, 'noone': 0, 'e': 3}, 'f': {'g': 7, 'c': 5, 'h': 5, 'i': 2, 'j': 4, 'noone': 0, 'l': 2}} |
我搜索并找到了所有我应该实现它的方法,但是找不到一个有效的方法。我试着这样做没有用:
1 2 3 | for i in G: if str(G[i]) == 'noone': G.pop('noone', None) |
我相信这会满足你的需要。
1 2 3 | for i in G: if 'noone' in G[i]: G[i].pop('noone') |
这里(g)实际上是一本字典,但更具体地说,它是一本值也是字典的字典。因此,当我们遍历g(
1 2 | for i in G: print(G[i]) |
所以你真正想做的是从G中的每一个字典中弹出,也就是说,对于每一个G[I],你想从那些"子"字典中去掉"noone",而不是最主要的。
另外:如果你真的想利用Python的便利性,你甚至可以简单地写
1 2 | for i in G: G[i].pop('noone', None) |
通过在pop中使用第二个参数,您甚至不必首先检查"noone"是否是g[i]中的键,因为pop方法不会引发异常。(如果您在没有第二个参数的情况下尝试这两行程序,那么对于所有没有"任何"内容的子听写,都会出现错误)。
迭代这些值并从每个值中弹出键:
1 2 | for v in G.values(): _ = v.pop('noone', None) |
我会去理解字典:
1 2 3 | >>> G = {'a': {'b': 10, 'c': 8, 'd': 3, 'noone': 0, 'e': 3}, 'f': {'g': 7, 'c': 5, 'h': 5, 'i': 2, 'j': 4, 'noone': 0, 'l': 2}} >>> {k1: {k2: v2 for (k2, v2) in v1.items() if k2 != 'noone'} for k1, v1 in G.items()} {'f': {'g': 7, 'c': 5, 'j': 4, 'h': 5, 'i': 2, 'l': 2}, 'a': {'b': 10, 'e': 3, 'd': 3, 'c': 8}} |