在dict中添加for循环的结果,Python

时间:2016-05-30 19:07:30

标签: python

我有一个包含大量信息的txt文件。在我的脚本中,我打开这个文件并使用内置函数和正则表达式删除不必要的东西,这是在for循环中完成的。

考虑如下所示的txt文件:

Monkey OFF OFF

大象ON ON

依旧......

我的剧本:

x = 'XXX'
y = 'YYY'
value = ''
name = ''
func_file, functionality_file_context = open_func_file(args)
for fline in functionality_file_context:
    if fline.strip():  # ignore empty lines or lines with only whitespace
        commentregex = re.compile('^[^#]')  # ignore lines that start with comment (#)
        if (commentregex.match(fline)):
            # replace tabs with whitespace
            replacetab = re.compile(r'\s+')
            fline = replacetab.sub(' ', fline)

            function_line = fline.split(' ', 2)
            if len(function_line) != 3:
                exit("Something wrong with this line: " + fline.strip() + "\" in: " + func_file)

            name = x + function_line[0].strip() + y
            value = func_override_parameter_value(fline, func_file, function_line,value)
            print name + value


myDict = {
"Bike": 0,
"Car": 2,
name: value
}

another_function(args.path, myDict)

如果例如OFF OFF匹配等,func_override_parameter_value检查应该给出什么值。例如OFF OFF = 1,ON ON = 2

通过打印(print name + value),我获得了具有正确指定值的所有名称。

open_func_file函数:

def open_func_file(args):
    functionality_file_context = ''
    func_file = ''
    for func_file in args.functionality_file:
        functionality_file_context = open(func_file).readlines()
    return func_file, functionality_file_context

现在到了这一点:

我在这个for循环运行之后有一个dict,它已经包含了一些键和值,例如:

myDict = {
"Bike": 0,
"Car": 2,
}

我想从我刚刚解析的文件中添加新的密钥和值"。我试着在字典中调用名字和值:

myDict = {
"Bike": 0,
"Car": 2,
name: value
}

最终结果应为:

myDict = {
"Bike": 0,
"Car": 2,
"XXXMonkeyYYY": 1,
"XXXElephantYYY": 2
}

但这只是给了我"大象":2并且跳过猴子。不知道怎么解决这个问题?订单无关紧要。

制作编辑

2 个答案:

答案 0 :(得分:3)

将代码放在循环内的字典中,放在print旁边。 namevalue一次只能保留一个值,他们无法神奇地记住他们曾经去过的所有内容,并且知道插入你的词典的正确方法。

答案 1 :(得分:1)

如果来自@ alex-hall的猜测和简明建议对于OP来说不够明确。也许是这样的:

#! /usr/bin/env python
from __future__ import print_function
import re


def open_func_file(args):
    functionality_file_context = ''
    func_file = ''
    for func_file in args.functionality_file:
        functionality_file_context = open(func_file).readlines()
    return func_file, functionality_file_context


def func_override_parameter_value(
        fline, func_file, function_line, value):
    """Mocking the undefined function."""
    return 42

args = "some_file_name"
x = 'XXX'
y = 'YYY'
value = ''
name = ''
myDict = {
    "Bike": 0,
    "Car": 2,
}
commentregex = re.compile('^[^#]')  # ignore lines that start with comment (#)
func_file, functionality_file_context = open_func_file(args)
for fline in functionality_file_context:
    if fline.strip():  # ignore empty lines or lines with only whitespace
        if (commentregex.match(fline)):
            # replace tabs with whitespace
            replacetab = re.compile(r'\s+')
            fline = replacetab.sub(' ', fline)

            function_line = fline.split(' ', 2)
            if len(function_line) != 3:
                exit("Something wrong with this line: "
                     "" + fline.strip() + "\" in: " + func_file)

            name = x + function_line[0].strip() + y
            value = func_override_parameter_value(
                fline, func_file, function_line, value)
            print(name + str(value))
            myDict[name] = value

提示:向下滚动到上面代码的最后一行,它只是说明:

myDict[name] = value