如何避免覆盖 python 中全局字典中的键?

How do I avoid overriding a key from a global dictionary in python?

我正在使用命令行参数作为用户输入...

from datetime import timedelta, datetime
import csv, argparse
from collections import defaultdict

parser = argparse.ArgumentParser()

parser.add_argument("-p", dest='prodfile', action="append", help="file names for prod")
args = parser.parse_args()

files_d={}
files_d[""]=[]

if args.testfile:
    testfile = args.testfile
    type_file="test"
    files_d[type_file]=testfile

if args.prodfile:
   prodfile = args.prodfile
   type_file="prod"
   files_d[type_file]=prodfile

print files_d

如何避免覆盖所有词典的 [type_file]?

EDIT 核心问题是如何累积共享相同键的值列表(在这种情况下,type_file 是与 [=13 重复的键=] 和 prodfile 都需要在列表中累积。

问题在于字典键是唯一的,因此对同一键的任何后续分配都将替换而不是添加到字典值。您需要的是 匹配值列表 .

的密钥

带有 list() 工厂函数的 collections.defaultdict 应该可以满足您的需求:

from collections import defaultdict     # <== new code

files_d = defaultdict(list)             # <== new code
files_d[""]=[]

if args.testfile:
    testfile = args.testfile
    type_file="test"
    files_d[type_file].append(testfile) # <== new code

if args.prodfile:
   prodfile = args.prodfile
   type_file="prod"
   files_d[type_file].append(prodfile)  # <== new code

祝你好运。希望这能解决您关于 [type_file] 覆盖值(替换它们)而不是附加到匹配值列表的问题。

您可以简单地按照以下步骤操作:

if args.testfile:
    testfile = args.testfile
    type_file="test"
    if files_d.get(type_file):
        files_d[type_file].append(testfile)
    else:
        files_d[type_file] = list(type_file)


if args.prodfile:
   prodfile = args.prodfile
   type_file="prod"
   if files_d.get(type_file):
        files_d[type_file].append(testfile)
    else:
        files_d[type_file] = list(type_file)

print files_d