Python 关于创建字典的更多信息
我是一名初学者,正在学习python中的词典,并且花了一天的大部分时间来研究它,我将非常感谢您的帮助 我想创建一个词典词典:Python 关于创建字典的更多信息,python,loops,dictionary,Python,Loops,Dictionary,我是一名初学者,正在学习python中的词典,并且花了一天的大部分时间来研究它,我将非常感谢您的帮助 我想创建一个词典词典: data = [['dog', 'a'], ['mouse', 'a'], ['dog', 'b'], ['mouse', 'c'], ['dog', 'c']] animals = ['dog', 'mouse'] 我想这样做: final = {'dog': {'a': 0, 'b': 0, 'c': 0}, 'mouse':{'a': 0, 'c': 0} }
data = [['dog', 'a'], ['mouse', 'a'], ['dog', 'b'], ['mouse', 'c'], ['dog', 'c']]
animals = ['dog', 'mouse']
我想这样做:
final = {'dog': {'a': 0, 'b': 0, 'c': 0}, 'mouse':{'a': 0, 'c': 0} }
到目前为止,我有这个代码,它显然不起作用:
animal_dict = {}
for d in data:
animal_dict[d[0]] = {}
letter_dict = {}
for animal in animal_dict:
for d in data:
if d[0] == animal:
letter_dict[d[1]] = 0
animal_dict[animal] = letter_dict
print animal_dict
请注意,它在“鼠标”字典中添加了一个额外的键(“b”)。我知道我让事情变得比应该的更复杂了!提前感谢您对新手的帮助。您正在将
animal_dict['dog']
和animal_dict['mouse']
设置为相同的字母dict
对象。添加到其中一个的任何键都将添加到另一个
您实际上不需要字母dict
。请尝试以下方法:
for animal in animal_dict:
for d in data:
if d[0] == animal:
animal_dict[animal][d[1]] = 0
您使用同一个字典来输入dog和mouse值,因此需要额外的“b”键,因为dog已经有了一个“b”。您可以创建一个
if/else
语句来区分它们。在将其添加到动物dict
时,您使用的是相同的dict
,因此有一个额外的b键。您应该检查animal_dict中的动物是否为,如果不是,则添加带有空dict的新密钥
for animal in animal_dict:
if not animal in animal_dict:
animal_dict[animal] = {}
for d in data:
if d[0] == animal:
animal_dict[animal][d[1]] = letter_dict
另一个选择是使用。这样就不需要在循环中进行密钥检查。实际上只需要一个循环:
data = [['dog', 'a'], ['mouse', 'a'], ['dog', 'b'], ['mouse', 'c'], ['dog', 'c']]
animals = {}
for animal, letter in data:
animals.setdefault(animal, {})[letter] = 0
或者如果您不喜欢设置默认值
:
for animal, letter in data:
if animal in animals:
animals[animal][letter] = 0
else:
animals[animal] = {letter: 0}
或使用defaultdict
:
from collections import defaultdict:
animals = defaultdict(dict) # creates a dict when the key doesn't exist
for animal, letter in data:
animals.[animal][letter] = 0
难道你不喜欢Python中有多少种不同的处理方式吗?:-)
您也可以将字母的创建移动到外部循环中:
for animal in animal_dict:
letter_dict = {} # Create new letter_dict for each animal
for d in data:
if d[0] == animal:
letter_dict[d[1]] = 0
animal_dict[animal] = letter_dict
又快又脏,动物名单真的没必要
d = {}
for animal, letter in data:
if not d.has_key(animal):
d[animal] = {}
if not d[animal].has_key(letter):
d[animal][letter] = 0
非常感谢你,搅拌机!:)我从这些帖子中学到了很多。
d = {}
for animal, letter in data:
if not d.has_key(animal):
d[animal] = {}
if not d[animal].has_key(letter):
d[animal][letter] = 0