簡體   English   中英

我有嵌套列表作為Python字典的條目。 如何打印第一個元素為“S”的嵌套列表?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM