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

时间:2015-08-08 22:04:31

标签: python dictionary key

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

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]?

编辑核心问题是如何累积共享相同密钥的值列表(在这种情况下,type_file是带有testfile和{{的重复键1}}都需要在列表中累积。

2 个答案:

答案 0 :(得分:0)

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

带有 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]覆盖值(替换它们)的问题,而不是附加到匹配值列表。

答案 1 :(得分:0)

您可以按照以下方式执行此操作:

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
相关问题