Python字典未正确填充for循环

Python字典未正确填充for循环,python,json,dictionary,Python,Json,Dictionary,我目前正在为基于浏览器的javascript数据库制作一些测试数据。我从一个网站上搜集了一些数据,并用它填充了一个python列表。现在,我正在尝试填充一个字典,添加一些其他随机数据并生成一个json文件。我的变量: cpartyList:元组列表。每个元组由4个字符串组成:Number1(唯一)、Number2、全名、地址 cpartyDict:用于以后序列化为json文件的python字典 cpartyList由40个元组组成。现在,用数据填充我的字典: for org in cpart

我目前正在为基于浏览器的javascript数据库制作一些测试数据。我从一个网站上搜集了一些数据,并用它填充了一个python列表。现在,我正在尝试填充一个字典,添加一些其他随机数据并生成一个json文件。我的变量:

  • cpartyList:元组列表。每个元组由4个字符串组成:Number1(唯一)、Number2、全名、地址
  • cpartyDict:用于以后序列化为json文件的python字典
cpartyList由40个元组组成。现在,用数据填充我的字典:

for org in cpartyList:
    #just to make shure that a tuple is 4 units and Number1 is unique
    if len(org) == 4 and org[0] not in cpartyDict.keys():
        cpartyDict[org[0]] = {
            "Number1": org[0],
            "Number2": org[1],
            "shortname": "",
            "fullname": org[2],
            "contacts": {
                "adressOfficial": org[3],
                "adressPostal": org[3],
                "phone": ''.join([str(random.randint(0,9)) for i in range(11)])
            }
        }

print(cpartyDict,keys()) 

但作为回报,我只得到字典中的最后两个元组(cpartyDict.keys()中有两个键)。怎么了?

您的代码正在运行。

import random
import pprint

cpartyList= [

  (1,'c1','c2','c3'),
  (2,'c1','c2','c3','c4'),
  (3,'c1','c2','c3'),
  (4,'c1','c2','c3','c4','c5'),
  (5,'c1','c2','c3'),
  (6,'c1','c2','c3')
  ]
cpartyDict = {}


for org in cpartyList:
    #just to make shure that a tuple is 4 units and Number1 is unique
    if len(org) == 4 and org[0] not in cpartyDict.keys():
        cpartyDict[org[0]] = {
            "Number1": org[0],
            "Number2": org[1],
            "shortname": "",
            "fullname": org[2],
            "contacts": {
                "adressOfficial": org[3],
                "adressPostal": org[3],
                "phone": ''.join([str(random.randint(0,9)) for i in range(11)])
            }
        }

pprint.pprint(cpartyDict)
结果

{1: {'Number1': 1,
     'Number2': 'c1',
     'contacts': {'adressOfficial': 'c3',
                  'adressPostal': 'c3',
                  'phone': '78858320412'},
     'fullname': 'c2',
     'shortname': ''},
 3: {'Number1': 3,
     'Number2': 'c1',
     'contacts': {'adressOfficial': 'c3',
                  'adressPostal': 'c3',
                  'phone': '40650498587'},
     'fullname': 'c2',
     'shortname': ''},
 5: {'Number1': 5,
     'Number2': 'c1',
     'contacts': {'adressOfficial': 'c3',
                  'adressPostal': 'c3',
                  'phone': '17115487396'},
     'fullname': 'c2',
     'shortname': ''},
 6: {'Number1': 6,
     'Number2': 'c1',
     'contacts': {'adressOfficial': 'c3',
                  'adressPostal': 'c3',
                  'phone': '54560186092'},
     'fullname': 'c2',
     'shortname': ''}}

你能出示清单吗??在for循环“您的计算机是否插入了插座?”之前,您是否初始化了一本空白词典。是的,我初始化了一个空白的dict和一个列表。显示列表需要一些时间,因为我设法覆盖了我的程序,删除了数据。该死的。谢天谢地,这是一个小脚本。您是否尝试过向(似乎不必要的)if添加带有调试输出的
else
?现在你的代码是这样的,你永远不知道为什么会出错。欢迎来到SO。如果您提供一个数据示例,以便其他人可以复制您的输出,则您更有可能找到愿意提供帮助的人。添加cpartyList内容。我按照tobias_k advise添加了一条else语句,结果发现我以某种方式用identicall Number1填充了cpartyList,因此for循环总是覆盖这一个键,最后,我只收到了2条记录。谢谢大家,很抱歉在这个超级糟糕的问题上浪费了你们的时间!