![](/img/trans.png)
[英]Suppose I have a dictionary. How do I strip out all the keys? Edit: This is a nested dictionary
[英]I have nested lists as entries to a Python dictionary. How do I print the nested list whose first elements is “S”?
我有一個字典,看起來像這樣:
my_dict = {(1,0): ['A', 'B'],
(1,1): [[['E'], [['A', 'B'], ['C', 'D']]]],
(1,2): [],
(2,1): [[['E'], [['A', 'B'], ['C', 'F']]], [['S'], [[[['E'], [['A', 'B'], ['C', 'D']]]], [[['G'], [['H', 'J'], [[['E'], [['A', 'B'], ['C', 'F']]]]]]]]]]
}
如何檢索我發現的以['S']開頭的第一個子列表? 對於以上示例,我希望獲得:
answer = [['S'], [[[['E'], [['A', 'B'], ['C', 'D']]]], [[['G'], [['H', 'J'], [[['E'], [['A', 'B'], ['C', 'F']]]]]]]]]
我不知道“ S”嵌套的深度。
編輯:
我嘗試如下遞歸執行:
def recursive_check(longlist):
for a_list in longlist:
if 'S' in a_lis:
return a_lis
else:
rec_check(a_list)
我收到以下錯誤:
RuntimeError:超過最大遞歸深度
編輯:列表可能看起來不同,每次都嵌套不同。
def first_s(lst):
if not (isinstance(lst, list) and lst):
return None
if lst[0] == ['S']:
return lst
else:
for x in lst:
y = first_s(x)
if y:
return y
使用您的my_dict
:
>>> print first_s(my_dict.values())
[['S'], [[[['E'], [['A', 'B'], ['C', 'D']]]], [[['G'], [['H', 'J'], [[['E'], [['A', 'B'], ['C', 'F']]]]]]]]]
獲取該列表: answer = my_dict[(2,1)][1]
它首先使用鍵(2, 1)
獲取字典值,然后獲取該值(這是一個列表)並在索引1處獲取其項,這是列表中的第二項(在0之后)。
>>> my_dict = {(1,0): ['A', 'B'],
... (1,1): [[['E'], [['A', 'B'], ['C', 'D']]]],
... (1,2): [],
... (2,1): [[['E'], [['A', 'B'], ['C', 'F']]], [['S'], [[[['E'], [['A', 'B'], ['C', 'D']]]], [[['G'], [['H', 'J'], [[['E'], [['A', 'B'], ['C', 'F']]]]]]]]]]
... }
>>> my_dict[(2,1)][1]
[['S'],
[[[['E'], [['A', 'B'], ['C', 'D']]]],
[[['G'], [['H', 'J'], [[['E'], [['A', 'B'], ['C', 'F']]]]]]]]]
(順便說一句,在你的例子中,你在(1,2): []
之后錯過了一個逗號(1,2): []
...更新:現在已修復:))
您可以打印像my_dict[(2,1)][1][0]
這樣的元素。
def nest(a,x): m=False for i in a: if type(i)==list: m=nest(i,x) else: if i==x: return True return m def our_fun(my_dict): for i in my_dict: for j in my_dict[i]: if nest(j,'S')==True: return my_dict[i]
我遞歸檢查了“ S”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.