【问题标题】:World of tanks Python list comparison from json来自json的坦克世界Python列表比较
【发布时间】:2015-09-19 05:31:03
【问题描述】:

好的,我正在尝试创建一个定义,该定义将从外部 Json 文件中读取 IDS 列表,它正在执行此操作。它甚至在程序加载时将数据放入数据库,我的问题是这个。我似乎无法将列表 ID 与比较匹配。这是我当前的代码:

def check(account):
global ID_account
import json, httplib
if not hasattr(BigWorld, 'iddata'):
    UID_DB = account['databaseID']
    UID = ID_account
    try:
        conn = httplib.HTTPConnection('URL')
        conn.request('GET', '/ids.json')
        conn.sock.settimeout(2)
        resp = conn.getresponse()
        qresp = resp.read()
        BigWorld.iddata = json.loads(qresp)
        LOG_NOTE('[ABRO] Request of URL data successful.')
        conn.close()
    except:
        LOG_NOTE('[ABRO] Http request to URL problem. Loading local data.')
    if UID_DB is not None:
        list = BigWorld.iddata["ids"]
        #print (len(list) - 1)
        for n in range(0, (len(list) - 1)):
            #print UID_DB
            #print list[n]
            if UID_DB == list[n]:
                #print '[ABRO] userid located:'
                #print UID_DB
                UID = UID_DB
    else:
        LOG_NOTE('[ABRO] userid not set.')  
    if 'databaseID' in account and account['databaseID'] != UID:
        print '[ABRO] Account not active in database, game closing...... '
        BigWorld.quit()

现在我的 json 文件如下所示:

{
"ids":[
  "1001583757",
  "500687699",
  "000000000"
  ]
}

现在,当我使用所有已注释掉的打印运行此程序时,它似乎执行得非常好,直到它尝试在 for 循环内进行匹配。即使打印显示 UID_DB 和 list[n] 是相同的值,它也没有设置我的变量,它没有发布任何错误,它只是简单地表现得好像没有匹配。我可能错过了循环中断吗?这里是 python 日志,以打印表的长度开始:

INFO: 2
INFO: 1001583757
INFO: 1001583757
INFO: 1001583757
INFO: 500687699
INFO: [ABRO] Account not active, game closing...... 

从日志中可以看出,它从不打印用户所在的打印,因此它不匹配它们。它只是继续循环并使用我在定义上方定义的默认 ID。任何有想法的人肯定会帮助我,因为我已经戳了这个东西 3 天了。

【问题讨论】:

  • 我不完全理解你的代码,但是看到你的 json 文件中的数据,我猜你是在比较整数和它们的字符串表示。也就是说,您将1001583757"1001583757" 进行比较。
  • 不要使用list作为变量名。
  • 尝试在 if 匹配条件之前打印值的类型 - print type(UID_DB) print type(list[n])
  • @Blckknght,是的,我假设是这种情况,但是当我运行代码时,它会将列表中的值打印为 1001583757,而不是让它包含引号。我应该尝试将列表响应设置为变量然后运行比较吗?
  • @VikasNehaOjha 你的建议正是我所需要的,TY 这么多。比较不匹配,因为第一个变量是整数,第二个变量是 Unicode,所以我简单地添加了转换字符串,现在代码处理得很好。 TY,建议。

标签: json list python-2.7 parsing


【解决方案1】:

@VikasNehaOjha 找到了这个问题的答案,它只是在匹配比较之前缺少对匹配类型的转换,我通过添加来做到这一点

list[n] = int(list[n])

这解决了我的问题,并最终匹配了比较。

【讨论】:

    猜你喜欢
    • 2011-12-05
    • 1970-01-01
    • 1970-01-01
    • 2019-09-11
    • 1970-01-01
    • 1970-01-01
    • 2015-08-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多