Python dict赋值为两个不同的查询返回相同的答案

Python dict赋值为两个不同的查询返回相同的答案,python,dictionary,Python,Dictionary,我有一个超级简单的程序,可以解析分数和时间数据 orig = https://games.crossfit.com/competitions/api/v1/competitions/open/2017/leaderboards orig等于我在本例中将其用作粘贴值的API调用的输出。如果将其粘贴到此处以获取原始值,则会太大 default_score = {1: '--', 2: '--', 3: '--', 4:

我有一个超级简单的程序,可以解析分数和时间数据

orig = https://games.crossfit.com/competitions/api/v1/competitions/open/2017/leaderboards
orig等于我在本例中将其用作粘贴值的API调用的输出。如果将其粘贴到此处以获取原始值,则会太大

default_score = {1: '--',
             2: '--',
             3: '--',
             4: '--',
             5: '--',
             6: '--'}
for i in range(50):
    time = default_score
    rank = default_score
    print orig[0]['athletes'][i]['name']
    for j in range(2):
        time[j] = orig[0]['athletes'][i]['scores'][j]['scoredetails']['time']
        rank[j]= orig[0]['athletes'][i]['scores'][j]['workoutrank']

print rank
print time
我不明白为什么我不能得到唯一的等级和时间值

我的结果是

Mathew Fraser
{0: '20', 1: '15', 2: '--', 3: '--', 4: '--', 5: '--', 6: '--'}
{0: '20', 1: '15', 2: '--', 3: '--', 4: '--', 5: '--', 6: '--'}
Richard Froning Jr.
{0: '26', 1: '16', 2: '--', 3: '--', 4: '--', 5: '--', 6: '--'}
{0: '26', 1: '16', 2: '--', 3: '--', 4: '--', 5: '--', 6: '--'}
Noah Ohlsen
{0: '50', 1: '5', 2: '--', 3: '--', 4: '--', 5: '--', 6: '--'}
{0: '50', 1: '5', 2: '--', 3: '--', 4: '--', 5: '--', 6: '--'}
Marcelo Bruno
{0: '37', 1: '37', 2: '--', 3: '--', 4: '--', 5: '--', 6: '--'}
{0: '37', 1: '37', 2: '--', 3: '--', 4: '--', 5: '--', 6: '--'}
....

我认为时间和等级都指向同一个默认分数字典。您需要复制默认词典。请参见下面的示例

default_score = {1: '--',
             2: '--',
             3: '--',
             4: '--',
             5: '--',
             6: '--'}
rank = default_score
time = default_score
#if I modify rank dictionary, even time is modified to the same value
rank[1]=5
print rank
print time
导致

{1: 5, 2: '--', 3: '--', 4: '--', 5: '--', 6: '--'}
{1: 5, 2: '--', 3: '--', 4: '--', 5: '--', 6: '--'}
{1: 5, 2: '--', 3: '--', 4: '--', 5: '--', 6: '--'}
{1: '--', 2: '--', 3: '--', 4: '--', 5: '--', 6: '--'}
但是什么时候

default_score = {1: '--',
             2: '--',
             3: '--',
             4: '--',
             5: '--',
             6: '--'}

rank_copy = default_score.copy()
time_copy = default_score.copy()
rank_copy[1] = 5
print rank_copy
print time_copy
导致

{1: 5, 2: '--', 3: '--', 4: '--', 5: '--', 6: '--'}
{1: 5, 2: '--', 3: '--', 4: '--', 5: '--', 6: '--'}
{1: 5, 2: '--', 3: '--', 4: '--', 5: '--', 6: '--'}
{1: '--', 2: '--', 3: '--', 4: '--', 5: '--', 6: '--'}

尝试使用Python调试器“导入pdb;pdb.set_trace()'您没有制作dict的副本,您只是对同一dict有两个不同的引用。“time”和“rank”变量是否没有捕获引用的输出?Do
default\u score.copy()
以便在每次迭代中创建dict的新实例。先生,你已经解决了。这是一个超级简单的解决方案。非常感谢。我猜这两行都指向同一本词典,必须明确地告诉他们复制它。