获取嵌套字典中的列表

时间:2016-05-20 19:19:02

标签: python dictionary nested

我正在与嵌套循环斗争..

我有一个字典,里面嵌有其他字典,例如:

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次)与嵌套字典的值。

这是传递给对象的单个值的示例:

Plot(
x = [1,2,3],
y = [4,5,6],
col = '#ff312221'
)

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

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

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

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

l = []

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

有人有一些提示吗?

3 个答案:

答案 0 :(得分:2)

试试这个,

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

答案 1 :(得分:1)

试试这个:

int*** C = {&A, &B};

答案 2 :(得分:1)

如果您尝试使用dd.items()词典,您将获得它的键和值:

>>> 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'密钥:

l = []
for key, value in dd.items():
    try:
        cords = value['x']
    except KeyError:
        cords = value['y']
    l.append(
       Plot(x=cords[0], y=cords[1], col=value['col'])
    )

您也可以创建生成器而不是附加到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)

我希望它有所帮助!