簡體   English   中英

每次元素更改時如何獲取新列表(元素是元組列表中每個元組的特定索引)

[英]How to get a new list every time an element changes (the element being a certain index for every tuple in a list of tuples)

我有一個列表,里面有這樣的列表:['L1045','u0','m0','BIANCA','他們沒有!']這一個['L1981','u16','m1' ,'COLUMBUS',“我沒有給你很多生命。”]從康奈爾電影對話語料庫解析,其中索引0是對話行ID,索引2是電影ID,索引3是行本身。 每部電影都有很多行,因此許多列表在索引2處具有相同的項目(例如,很多'm0')。 但是,它們在每部電影中都沒有每一行,因此索引0處的項目可能會落入某些模式,但其他數字不存在(例如,可能存在“L99”,“L100”,“L102”表示特別是電影,但之后可能會有103-179的差距)。

基本上,我正在嘗試為每個電影中的所有連續行創建每個索引3的單獨字符串列表。 因此,每個電影的每個單獨“場景”的單獨行列表。

我只是很難到達那里。 我不知道我是否應該創建一個字典,其中每個獨特的電影(索引2)都有一個唯一的鍵,其值由一個元組列表組成,每個元組都有行號和行本身。 然后做某種計數器來檢查行號等是否有間隙等)。 如果我走這條路,我甚至都在努力想辦法為每部特定的電影做些什么......

任何幫助將非常感謝!

下面是一些我知道不起作用的代碼,但展示了我最初的一些思考過程:

movie_lines = 'DIRECTORYPATH/movie_lines.txt'
with open(movie_lines, "r", encoding="ISO-8859-1") as fh:
    lines_chunks = [line.split(" +++$+++ ") for line in fh]

number = 0
counter = 'm' + str(number)
new_list = []

for i in range(616):  
    number = 0
    counter = 'm' + str(number)

    for line in lines_chunks:
        if line[2] == counter:
            new_list.append([(line[2], line[0], line[4])])
        number += 1 

這是我的方法:

我使用嵌套字典來存儲數據:

data = {'movie_id' : {'scene_id' : tuple(int(line_id), character, actual_line)}}

這樣,如果你想從特定電影中的特定場景中檢索所有行,你只需要調用data['movie']['scene'] ,返回是一個元組列表。

這是代碼:

movie_lines = 'movie_lines.txt'
with open(movie_lines, "r") as f:
    lines = [line.split(' +++$+++ ') for line in f]

data = dict()

for line in lines:
    # line[0] --> line_id
    # line[1] --> scene_id
    # line[2] --> movie_id
    # line[3] --> character???
    # line[4] --> actual_line
    if not line[2] in data:
        data[line[2]] = {line[1]: [(int(line[0][1:]),line[3],line[4])]}
    elif not line[1] in data[line[2]]:
        data[line[2]][line[1]] = [(int(line[0][1:]),line[3],line[4])]
    else:
        data[line[2]][line[1]].append((int(line[0][1:]), line[3], line[4]))

# taking movie 'm0' and scene 'u0' as an example
test = data['m0']['u0']
test.sort()  # by default sort is done by first element in tuple
print(test)

int(line[0][1:])將行id“Lxxx”轉換為整數,以便以后進行排序。

輸出:

[(49,'BIANCA','你有沒有改變你的頭發?\\ n'),(51,'BIANCA','你可能想要考慮它\\ n'),(165,'BIANCA','無處......嗨,爸爸。\\ n'),(179,'BIANCA',“現在不要生氣。爸爸,但是這個男孩......我想他可能會問...... \\ n”),... 。,(1021,'BIANCA','那個女人是完整的水果圈還是僅僅是我?\\ n'),(1045,'BIANCA','他們沒有!\\ n'),(1051,' BIANCA','Patrick - 就是那個。\\ n')]

希望這可以幫到你。 干杯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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