用Python创建二维字典

22
我有一个来自“set1”输出的细节列表,如“name”,“place”,“animal”,“thing”,也有一个相同细节的“set2”。
我想创建一个字典, 用这些行 dict_names[setx]['name']...等。 这是最佳方式吗?如果不是,我该怎么做?
我不确定在字典中如何使用2D.. 有什么提示吗?

提供更具体和完整的示例会有所帮助。setx 中包含什么,你希望 dict_names[setx]['name'] 返回什么? - abarnert
5个回答

34

它将具有以下语法

dict_names = {
    'd1': {
        'name': 'bob',
        'place': 'lawn',
        'animal': 'man'
    },
    'd2': {
        'name': 'spot',
        'place': 'bed',
        'animal': 'dog'
    }
}

然后你可以查找类似的东西

>>> dict_names['d1']['name']
'bob'
为了分配一个新的内部字典。
dict_names['d1'] = {'name': 'bob', 'place': 'lawn', 'animal': 'man'}
为内部字典分配特定值。
dict_names['d1']['name'] = 'fred'

1
我已经创建了 {'name':'bob', 'place':'lawn', 'animal':'man'} 部分,但如何将其分配为 d1 的键? - user2921139
2
dict_names['d1'] = {'name':'bob', 'place':'lawn', 'animal':'man'} - Cory Kramer
1
所以这就像一个常规的一维字典。 - user2921139
抱歉 - 我跟着整件事走了。奇怪的是,尽管我清楚地理解字典概念,但这花费了我几分钟时间。我认为大型结构有些让我感到害怕! - user2921139
如果我需要通过第一和第二个键同时获取顶层对象,比如提取所有包含“name”标签的对象,该怎么办? - chiffa
好答案!我们能不能用for循环来完成上面的操作; 也就是说,假设有k个具有相同键但不同特征的字典。我想在循环中将它们合并成一个二维字典。我尝试过初始化一个空字典并进行附加操作。但那没有起作用。谢谢您的帮助! - Noprogexprnce mathmtcn

3

类似这样的内容可以起到作用:

set1 = {
     'name': 'Michael',
     'place': 'London',
     ...
     }
# same for set2

d = dict()
d['set1'] = set1
d['set2'] = set2

然后你可以这样做:

d['set1']['name']

等等。最好将其视为嵌套结构(而不是2D矩阵):

{
 'set1': {
         'name': 'Michael',
         'place': 'London',
         ...
         }
 'set2': {
         'name': 'Michael',
         'place': 'London',
         ...
         }
}

这里有一个简单的方法查看嵌套字典的方式。


只返回翻译文本: 这将节省重复值 - numerah

3

类似这样的应该可以工作。

dictionary = dict()
dictionary[1] = dict()
dictionary[1][1] = 3
print(dictionary[1][1])

您可以将其扩展到更高的维度。

0
如果我正确理解您的问题,您需要的是一个嵌套字典。您可以使用addict模块轻松创建嵌套字典。 https://github.com/mewwts/addict 如果每个集合中的项都是有序的,您可以使用以下方法。
 body = Dict()
    setx = ['person1','berlin','cat']
    sety = ['person2','jena','dog']
    setz = ['person3','leipzig','tiger']
    for set_,s in zip([setx,sety,setz],['x','y','z']):
        for item,item_identifier in zip(set_,['name','city','animmal']):
            body[f'set{s}'][f'{item_identifier}'] = item

现在你可以按照以下方式轻松访问项目。

print(body['setx']['name'])

0

嵌套的二维字典(dict_names = {})的简单一行代码:

dict_names.setdefault('KeyX',{})['KeyY']='Value'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接