我使用命令行参数作为用户输入...
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}}都需要在列表中累积。
答案 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