Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 关于创建字典的更多信息_Python_Loops_Dictionary - Fatal编程技术网

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} }

我是一名初学者,正在学习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} }
到目前为止,我有这个代码,它显然不起作用:

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