我的循环没有按计划工作

2024-05-14 08:41:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用列表grundformen中的正确项目填充list_of_occurences。在

我的for循环没有按预期工作。它不会从头开始重新启动,只在读取器中遍历一次行。因此它不会完全填满列表。在

这是它打印的内容(您可以看到缺少的部分-因为它不会从列表的开头开始搜索-):

# List_of_occurrences (1 line - wrapped for easier reading)
[['NN', 1328, ('Ziel',)], ['ART', 771, ('der',)], 
 ['$.', 732, ('_',)], ['VVFIN', 682, ('schlagen',)], 
 ['PPER', 592, ('sie',)], ['$,', 561, ('_',)], 
 ['ADV', 525, ('So',)], ['APPR', 507, ('in',)], 
 ['NE', 433, ('Johanna',)], ['$(', 363, ('_',)], 
 ['VAFIN', 334, ('haben',)], ['ADJA', 307, ('tragisch',)], 
 ['ADJD', 278, ('recht',)], ['KON', 228, ('Doch',)], 
 ['VVPP', 194, ('reichen',)], ['VVINF', 161, ('stören',)], 
 ['KOUS', 151, ('Während',)], ['PPOSAT', 120, ('ihr',)], 
 ['PTKVZ', 104, ('weiter',)], ['PRF', 98, ('sich',)], 
 ['APPRART', 90, ('zu',)], ['PTKNEG', 87, ('nicht',)], 
 ['VMFIN', 76, ('sollen',)], ['PIAT', 66, ('kein',)], 
 ['PIS', 65, ('etwas',)], ['PTKZU', 52, ('zu',)], 
 ['PRELS', 51, ('wer',)], ['PROAV', 42, ('dabei',)],  
 ['PDS', 38, ('jener',)], ['PDAT', 37, ('dieser',)], 
 ['PWAV', 30, ('wie',)], ['PWS', 26, ('Was',)], 
 ['CARD', 24, ('drei',)], ['KOKOM', 21, ('wie',)], 
 ['VAINF', 18, ('werden',)], ['KOUI', 15, ('um',)], 
 ['VMINF', 10, ('können',)], ['VVIZU', 10, ('aufklären',)], 
 ['VAPP', 10], ['PTKA', 6], ['PTKANT', 6], ['PWAT', 4], 
 ['VVIMP', 4], ['PRELAT', 4], ['APZR', 3], ['APPO', 2], 
 ['FM', 1]]

# Grundformen (1 line, wrapped for reading)
['Ziel', 'der', '_', 'schlagen', 'sie', '_', 'So', 'in', 'Johanna',
 '_', 'haben', 'tragisch', 'recht', 'Doch', 'reichen', 'stören', 
 'Während', 'ihr', 'weiter', 'sich', 'zu', 'nicht', 'sollen', 'kein', 
 'etwas', 'zu', 'wer', 'dabei', 'jener', 'dieser', 'wie', 'Was', 
 'drei', 'wie', 'werden', 'um', 'können', 'aufklären']  

^{pr2}$

整个输入文件:https://www.dropbox.com/sh/xyktjk4ycm8x6v0/AACou438_eEWx-ZYmByBiqp_a/material-2.csv?dl=0

输入文件的一部分:

1个Als Uukus u6 6个CP_ 2 es es Uupper U3 | Nom | Sg | Neut 6 6 SB |_ 3祖祖普特卡4莫默_ 4个5个月_ 5奥弗格霍伦6 6 OC_ 6 hatte haben | VAFIN | Sg | Past | Ind 8 8月MO |_ 7、8、8、8、普南语_ 8 verließverlassen uvvfin_3 | Sg |过去| Ind 0 0根根|_ 9 Johanna Johanna | NE | Sg | Masc 8 8 SB |_ 10 von von进近5 5 SBP_ 11 Rotenhoff Rotenhoff Rotenhoff Uune UuDat | Sg | Neut 10 10 NK |_ 12、8、8、8、普南语_ 13 ohne-ohne-Uukoui-18 18 18号CP-CP_ 14 ein ein |艺术| Sg | Neut 16 16 NK |_ 15个rechtes recht uu uja | Pos | Nom | Sg | Neut 16 16 NK |_ 16 Ziel Ziel?NN?Nom?Sg?Neut 18 18年OA_ 17日下午18:00_ 18哈本哈本瓦因夫信息8月8日_ 19,18 18 18浦那普纳语_ 20 das der |艺术| Sg | Neut 21 21 21 NK |_ 21 Gutshaus Gutshaus Uunn | Nom | Sg | Neut 16 16应用程序_ 22岁。_ _ _ $. _八、八、双关语

我怎样才能改变我的循环,让它能填满一切?在


Tags: 列表forsgnomcpzuderren
2条回答
reader = csv.reader(material, delimiter='\t', quotechar="\t")

将quotechar设置为与分隔符相同看起来很奇怪。CSV阅读器可能会感到困惑,要么将所有制表符(\t)作为分隔符,要么将它们全部解释为引号。在

您在读取csv数据时遇到问题。在

在这里,数据被读入list,并且可以在第二个循环中执行,而不是打开另一个file-object,但您甚至不需要在csv数据中循环两次:

import csv
import collections

occurences = collections.Counter()
grundformen = collections.defaultdict(list)

with open("material-2.csv", mode='r', newline='', encoding="utf-8") as material:
    reader = [ln for ln in csv.reader(material, delimiter='\t', quotechar="\t") if ln]
    for line in reader:
        occurences[line[5]] += 1
        grundformen[line[5]].append(line[2])
    list_of_occurences = list(map(list, occurences.most_common()))
    for elem in list_of_occurences:
        elem.append(grundformen[elem[0]][0])

print(occurences)

通过从您的csv数据中生成一个list,您可以调用break语句,并且仍然能够在下一个循环的list的开头开始一个新的循环。当您在^{}上循环时,这是一个iterator,因此即使在调用break时,也将从中断的地方开始,直到其数据耗尽。在

相关问题 更多 >

    热门问题