You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Kivy/Python中用.update()保存字典循环的全部结果到循环外

解决循环外获取所有字典生成结果的问题

你遇到的问题本质是字典的update()方法会覆盖已有键的值。每次循环中生成的data字典,键都是'1'、'2'、'3',调用datas.update(data)时,会把datas里对应键的旧值替换成当前循环的新值,所以循环结束后,datas里的每个键只保留最后一次循环的结果。

方案1:用列表存储每次循环生成的完整字典

如果需要保留每次循环生成的完整字典结构,直接把datas定义为列表,每次循环用append()添加生成的data即可:

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout


class DataTable(BoxLayout):
    def __init__(self, table='', **kwargs):
        super().__init__(**kwargs)

        def build(self):
            # 初始化列表存储所有循环生成的字典
            datas = []
            for i in range(3):
                data = {
                    '1': {i: 'TESTa'},
                    '2': {i: 'TESTb'},
                    '3': {i: 'TESTc'},
                }
                datas.append(data)  # 添加而非覆盖

            print(datas)  # 循环外输出所有结果
            return datas

        test = build(self)

class DataTableApp(App):
    def build(self):
        return DataTable()

if __name__ == '__main__':
    DataTableApp().run()

输出结果:

[{'1': {0: 'TESTa'}, '2': {0: 'TESTb'}, '3': {0: 'TESTc'}}, {'1': {1: 'TESTa'}, '2': {1: 'TESTb'}, '3': {1: 'TESTc'}}, {'1': {2: 'TESTa'}, '2': {2: 'TESTb'}, '3': {2: 'TESTc'}}]

方案2:按键聚合所有循环结果

如果需要把每个键('1'、'2'、'3')对应的所有循环结果聚合在一起,可以初始化datas的每个键为列表,循环时将对应条目添加到列表中:

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout


class DataTable(BoxLayout):
    def __init__(self, table='', **kwargs):
        super().__init__(**kwargs)

        def build(self):
            # 初始化每个键对应一个空列表
            datas = {'1': [], '2': [], '3': []}
            for i in range(3):
                data = {
                    '1': {i: 'TESTa'},
                    '2': {i: 'TESTb'},
                    '3': {i: 'TESTc'},
                }
                # 将每个键的当前结果添加到对应列表
                for key in datas:
                    datas[key].append(data[key])

            print(datas)
            return datas

        test = build(self)

class DataTableApp(App):
    def build(self):
        return DataTable()

if __name__ == '__main__':
    DataTableApp().run()

输出结果:

{'1': [{0: 'TESTa'}, {1: 'TESTa'}, {2: 'TESTa'}], '2': [{0: 'TESTb'}, {1: 'TESTb'}, {2: 'TESTb'}], '3': [{0: 'TESTc'}, {1: 'TESTc'}, {2: 'TESTc'}]}

内容的提问来源于stack exchange,提问作者Lod

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 18:31:11