[英]Retain all entries except for one key python
我有一本 python 字典。 只是為了給出上下文,我正在嘗試編寫自己的簡單交叉驗證單元。
所以基本上我想要的是獲取除給定鍵之外的所有值。 並且根據輸入,它返回字典中的所有值,除了那些已經給出的值。
因此,如果輸入是 2 和 5,那么 output 值沒有來自鍵 2 和 5 的值?
for key, value in your_dict.items():
if key not in your_blacklisted_set:
print value
美妙之處在於這個偽代碼示例是有效的 python 代碼。
它也可以表示為列表推導式:
resultset = [value for key, value in your_dict.items() if key not in your_blacklisted_set]
只是為了玩套裝
keys = set(dict.keys())
excludes = set([...])
for key in keys.difference(excludes):
print dict[key]
如果您的目標是返回一個新字典,其中包含除一個或幾個之外的所有鍵/值,請使用以下內容:
exclude_keys = ['exclude', 'exclude2']
new_d = {k: d[k] for k in set(list(d.keys())) - set(exclude_keys)}
其中'exclude'
可以替換為應該排除的(一個或多個)鍵的列表。
keys = ['a', 'b']
a_dict = {'a':1, 'b':2, 'c':3, 'd':4}
[a_dict.pop(key) for key in keys]
彈出要丟棄的密鑰后, a_dict 將保留您要使用的密鑰。
給定字典說
d = {
2: 2, 5: 16, 6: 5,
7: 6, 11: 17, 12: 9,
15: 18, 16: 1, 18: 16,
19: 17, 20: 10
}
那么簡單的理解示例將達到您可能想要的
[v for k,v in d.iteritems() if k not in (2,5)]
此示例列出所有不帶鍵 {2,5} 的值
例如上述理解的 O/P 是
[5, 6, 1, 17, 9, 18, 1, 16, 17, 10]
此外,作為使用集合的列表理解:
d = dict(zip(range(9),"abcdefghi"))
blacklisted = [2,5]
outputs = [d[k] for k in set(d.keys())-set(blacklisted)]
怎么樣沿着以下幾行:
In [7]: d = dict((i,i+100) for i in xrange(10))
In [8]: d
Out[8]:
{0: 100,
1: 101,
2: 102,
3: 103,
4: 104,
5: 105,
6: 106,
7: 107,
8: 108,
9: 109}
In [9]: exc = set((2, 5))
In [10]: for k, v in d.items():
....: if k not in exc:
....: print v
....:
....:
100
101
103
104
106
107
108
109
使用異常處理
facebook_posts = [
{'Likes': 21, 'Comments': 2},
{'Likes': 13, 'Comments': 2, 'Shares': 1},
{'Likes': 33, 'Comments': 8, 'Shares': 3},
{'Comments': 4, 'Shares': 2},
{'Comments': 1, 'Shares': 1},
{'Likes': 19, 'Comments': 3}
]
total_likes = 0
for post in facebook_posts:
try:
total_likes = total_likes + post['Likes']
except KeyError:
pass
print(total_likes)
您還可以使用:
except KeyError: 'My Key'
但可能只適合一次性使用
如果您打算修改結果字典,請小心使用淺拷貝。
import copy
def copy_dict_except_keys_shallow(d:dict, exclude_keys):
return {k: d[k] for k in set(list(d.keys())) - set(exclude_keys)}
def copy_dict_except_keys_deep(d:dict, exclude_keys):
return {k: copy.deepcopy(d[k]) for k in set(list(d.keys())) - set(exclude_keys)}
original = {'a': 1, 'b': [1, 2, 3]}
deep = copy_dict_except_keys_deep(original, ['a'])
deep['b'].append(4)
print("Modifying the deep copy preserves the original")
print(f"original: {original}")
print(f"deep copy: {deep}")
print()
shallow = copy_dict_except_keys_shallow(original, 'a')
shallow['b'].append(4)
print("Modifying the shallow copy changes the original")
print(f"original: {original}")
print(f"shallow copy: {shallow}")
Modifying the deep copy preserves the original
original: {'a': 1, 'b': [1, 2, 3]}
deep copy: {'b': [1, 2, 3, 4]}
Modifying the shallow copy changes the original
original: {'a': 1, 'b': [1, 2, 3, 4]}
shallow copy: {'b': [1, 2, 3, 4]}
你也可以使用 pydash - https://pydash.readthedocs.io/en/latest/
from pydash import omit
d = {'a': 1, 'b': 2, 'c': 3}
c = omit(d, 'a')
print(c) # {'b': 2, 'c': 3}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.