我的問題:我有一個看起來像這樣的嵌套字典:
my_dict = {
'type_1' : {
'id1' : some_item,
'id2' : some_item_2,
},
'type_2' :{
'id3' : some_item3,
'id4' : some_item4,
}
}
我不打算在這些 sub_dicts 中添加更多嵌套,所以我認為這應該相當容易。
現在我想在一個串列中獲取所有內部鍵(以“id”開頭的所有內容),
以便我得到['id1', 'id2', 'id3', 'id4]
最簡單的方法是使用兩個 for 回圈,但我希望它盡可能簡潔。
我最初的方法是這樣的:
all_keys = [list(sub_dict.keys()) for sub_dict in my_dict.values()]哪個輸出
[['id1', 'id2'], ['id3', 'id4']]是我想要到達的地方的一半。在前面添加星號list(sub_dict(keys))會引發語法錯誤:
“無法在理解中使用可迭代解包”
知道如何在一個非嵌套串列中使用最多一行代碼獲取所有“id”字串嗎?
uj5u.com熱心網友回復:
您需要解開嵌套字典的鍵,如下所示:
res = [key for d in my_dict.values() for key in d.keys() if isinstance(key, str) and key.startswith("id")]
print(res)
輸出
['id1', 'id2', 'id3', 'id4']
此外,您需要檢查鍵實際上是字串(使用isinstance),然后檢查它們是否以“id”開頭(使用startswith)。
作為替代用途chain.from_iterable:
res = [key for key in chain.from_iterable(my_dict.values()) if isinstance(key, str) and key.startswith("id")]
print(res)
同樣按照@user2390182 的建議,您不需要在嵌套字典上使用 .keys() ,只需執行以下操作:
res = [key for sub_dict in my_dict.values() for key in sub_dict if isinstance(key, str) and key.startswith("id")]
uj5u.com熱心網友回復:
您的解決方案沒問題,您可以使用itertools.chain以下方法更正此問題:
>>> from itertools import chain
>>> list(chain.from_iterable(sub_dict for sub_dict in my_dict.values()))
['id1', 'id2', 'id3', 'id4']
感謝@user2390182 縮短方法:
>>> list(chain.from_iterable(my_dict.values()))
# Or
>>> [*chain(*map(chain, my_dict.values()))]
['id1', 'id2', 'id3', 'id4']
uj5u.com熱心網友回復:
首先,您需要訪問 dict 的值,然后訪問該值的鍵
new_dict=[id for i in my_dict.values() for id in i.keys()]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/327218.html
上一篇:為什么我的資料在沒有重繪和清除JPA的情況下不能更新?
下一篇:為什么我收到錯誤“NoSuchMethodError:Class'List<List<int>>'hasnoinstancegetter'shap
