如何避免覆盖 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
我正在使用命令行参数作为用户输入...
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