在嵌套词典中获取列表

2024-09-30 12:28:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为一个嵌套循环而挣扎。。在

我有一本词典,里面嵌套了其他词典,比如:

dd = {}

dd[1] = {'layer1' : 'A', 'FieldA':[[1,2,3], [99,22,13]], 'col': '#ff310021'}
dd[2] = {'layer2' : 'B', 'FieldB':[[4,5,6], [10,33,22]], 'col': '#ff310011'}
dd[3] = {'layer3' : 'C', 'FieldC':[[11,2,33], [2,5,1]], 'col': '#ff312221'}

然后我有一个对象,必须用嵌套字典的值为每个dd键填充(在示例中为3次)。在

下面是一个将单个值传递给对象的示例:

^{pr2}$

对象创建另一个将在另一个上下文中使用的类。在

但是,对对象的每次调用都必须附加到一个列表中。在

我要做的是循环字典键以自动填充对象并将结果附加到列表中。在

因此,对于示例数据,第一个对象应该如下所示:

l = []

l.append(Plot(
x = [1,2,3],
y = [99,22,13],
col = '#ff310021'
))

有人有什么线索吗?在


Tags: 对象示例列表字典coldd词典嵌套循环
3条回答

试试这个

dd = {}

dd[1] = {'layer1' : 'A', 'FieldA':[[1,2,3], [99,22,13]], 'col': '#ff310021'}
dd[2] = {'layer2' : 'B', 'FieldB':[[4,5,6], [10,33,22]], 'col': '#ff310011'}
dd[3] = {'layer3' : 'C', 'FieldC':[[11,2,33], [2,5,1]], 'col': '#ff312221'}

l = []

for key in dd:
    x, y = dd[key].get('FieldA', None) or dd[key].get('FieldB', None) or dd[key].get('FieldC', None)
    col = dd[key]['col']

    l.append(Plot(x=x, y=y, col=col))

如果您尝试对dd.items()dict进行编辑,您将得到它的键和值:

>>> for key, value in dd.items():
...     print(key, value)
1 {'col': '#ff310021', 'layer1': 'A', 'x': [[1, 2, 3], [99, 22, 13]]}
2 {'layer2': 'B', 'col': '#ff310011', 'y': [[4, 5, 6], [10, 33, 22]]}
3 {'col': '#ff312221', 'y': [[11, 2, 33], [2, 5, 1]], 'layer3': 'B'}

因此,对于每个项目,您可以得到'x''y'键:

^{pr2}$

您也可以创建一个生成器,而不是附加到l

def build_plots(plot_dict):
    for key, value in plot_dict.items():
        try:
            cords = value['x']
        except KeyError:
            cords = value['y']
        yield Plot(x=cords[0], y=cords[1], col=value['col'])

通过这样做来消耗它:

for plot in build_plots(dd):
    print(plot)

我希望这有帮助!在

试试这个:

for i in dd:
    if 'FieldA' in dd[i]:
        x = dd[i]['x'][0]
        y = dd[i]['x'][1]
    if 'FieldB' in dd[i]:
        x = dd[i]['y'][0]
        y = dd[i]['y'][1]
    if 'FieldC' in dd[i]:
        x = dd[i]['z'][0]
        y = dd[i]['z'][1]
    col = dd[i]['col']
    print x, y, col
    l.append(Plot(x,y,col))

相关问题 更多 >

    热门问题