(PYTHON)使用dictionnary更新列表中的变量

时间:2018-04-12 11:29:31

标签: python list dictionary

我必须说我对Python很陌生,我无法想出如何解决我的问题。

我有一个看起来像这样的列表

ligne = ['DR', '0.8282312925170068']

我希望它有一个额外的元素:

ligne = ['DETECTION RATE', 'DR', '0.8282312925170068'].

问题是我需要为每个列表添加正确的属性。 我做的是

    for line in f.readlines():
        ligne = line.split()
        for step in {
            "DR" : (ligne = ["Detection Rate"] + ligne),
            "FAR" :(ligne = ["False Alarm Rate"] +ligne),
            "FNR" :(ligne = ["False N Rate"] + ligne),
            "MOTA":(ligne = ["MOTA"] + ligne),
            "MOTP":(ligne = ["MOTP"] + ligne),
            "PFR":(ligne = ["PFR"] + ligne),
            "Precision":(ligne = ["Precision"] + ligne),
        }.get(ligne[0]):step()

但这不起作用,因为(ligne = [“Detection Rate”] + ligne)不是函数。

怎么可以做到这一点?

3 个答案:

答案 0 :(得分:2)

这不起作用,因为{ }是一个字典(数据结构),而您的代码正试图像switch语句一样使用它。

首先设置等价:

translation = {
        "DR"  :"Detection Rate",
        "FAR" :"False Alarm Rate",
        "FNR" :"False N Rate"}

没有必要翻译转化为自己的文字。

for line in f.readlines():
    ligne = line.split()
    ligne = [translation.get(ligne[0],ligne[0])] + ligne

答案 1 :(得分:1)

这是过于复杂和语法错误。由于您只需要前缀,只需创建一个字典关键字=>前缀:

d = {"DR":"Detection Rate","FAR":"False Alarm Rate","FNR":"False N Rate"}

然后添加值(如果令牌不在字典中,重复键,它显然覆盖了一半的值):

for line in f:
    ligne = line.split()
    key = ligne[0]
    ligne.insert(0,d.get(key,key))
编辑:第一个单词后面的尾随冒号提示。只需改为:

key = ligne[0].rstrip(":")
ligne.insert(0,d.get(key,key)+":")

注意:

  • insert适用于:保存一些临时列表创建(但不保存元素移位)
  • for line in f可以避免立即读取文件。它只是逐行阅读。

答案 2 :(得分:1)

列出新变量:

Vlist=['Detection Rate','False', 'Alarm Rate','False N 
    Rate','MOTA','MOTP','PFR','Precision']

在txt

中为新行(添加了新变量)填空
newline=[]

从文件中的第一个newV和换行符循环并连接在一起

for line,newV in zip(f.readlines(),Vlist):
    ligne=line.split()
    newV+=ligne
    newline+=' '.join(newV)

将新行重写到文件

for i in newline:
    f.write(i)