Python 结合使用字典的update和append
假设我有一个数据文件,其中有一个字符串(比如“a”、“b”、“c…”)多次出现。我希望使用“a”和“b”作为键,它们有多个与之关联的值 如果我的字典是dict,我使用Python 结合使用字典的update和append,python,Python,假设我有一个数据文件,其中有一个字符串(比如“a”、“b”、“c…”)多次出现。我希望使用“a”和“b”作为键,它们有多个与之关联的值 如果我的字典是dict,我使用dict1.update({'a':1})后跟dict1.update[{'a':2}],则2会覆盖值1。但是,我不能使用dict['a'].append([2]),除非密钥“a”已经在文件中 因此,我正在寻找某种方法来检查一个键是否已经在我的列表中,在这种情况下,我使用append,或者如果没有,使用update。在这种情况下,什
dict1.update({'a':1})
后跟dict1.update[{'a':2}]
,则2会覆盖值1。但是,我不能使用dict['a'].append([2])
,除非密钥“a”已经在文件中
因此,我正在寻找某种方法来检查一个键是否已经在我的列表中,在这种情况下,我使用append,或者如果没有,使用update。在这种情况下,什么是简单的条件语句?使用
例如:
from collections import defaultdict
d = defaultdict(list)
d['a'].append(1)
d['a'].append(2)
基本上,您可以使用一个工厂函数来初始化它,该函数将返回“默认”值,当您尝试按键从字典中获取项时,如果该键尚不存在,它将运行该函数。在这种情况下,它将返回一个空列表。要检查dict是否有键,可以执行
dict.has_key('a')
有两种方法:
a 1
b 4
a 2
...
然后你可以这样做:
import collections
answer = collections.defaultdict(list)
with open('path/to/file') as infile:
for line in infile:
key, value = line.strip().split()
answer[key].append(value)
如果不想使用defaultdict,则:
answer = {}
with open('path/to/file') as infile:
for line in infile:
key, value = line.strip().split()
if key not in answer:
answer[key] = []
answer[key].append(value)
希望这对您有所帮助在这种情况下,输入“list”是什么?
list
是内置函数list()
,如果您尝试在解释器上运行,您将看到它返回一个空列表。请注意,您应该省去括号,因为您不希望在创建defaultdict时调用函数,而是希望为该对象提供对函数的引用,以便它可以在每次需要创建默认值时调用它<代码>列表可以替换为任何返回字典默认值的函数(无论它是内置的还是自己定义的,只要它不带任何参数)。dict.fromkeys(x,[])
的工作方式与您期望的不符。它将创建一个字典,其中包含与同一列表对象关联的所有键。向该列表添加内容对象将在任何地方添加:哦。我不知道。除了defaultDict之外,还有什么补救方法吗?有很多方法可以做到这一点,包括字典理解{k:[]for k in keys}
。不,我是说使用fromkeys。基本上这里有人告诉我这件事,我觉得这件很漂亮。尽管defaultDict看起来更加圆滑dict.fromkeys()
的第二个参数只能合理地是不可变的值,因此在这种特殊情况下没有合理的方法使用dict.fromkeys()
。has_key()
现在已经被弃用很久了。改为使用my_dict中的键,或者在这种情况下使用dict.setdefault()
或collections.defaultdict
。
answer = {}
with open('path/to/file') as infile:
for line in infile:
key, value = line.strip().split()
if key not in answer:
answer[key] = []
answer[key].append(value)