Добавление значений в словарь из списка с циклами for - PullRequest
0 голосов
/ 31 декабря 2018

Я пытаюсь добавить значения в словари, в которых перечислены элементы.Я пытаюсь извлечь эти значения из списка, однако они возвращают только одно и то же значение в каждом словаре.

Вот мой код:

# Use a for loop to create a list of dictionaries with the associated information.
providers = ["Level3", "Verisign", "Google", "Quad9", "DNS.WATCH",
             "Comodo Secure DNS", "OpenDNS Home", "Norton ConnectSafe",
             "GreenTeamDNS", "SafeDNS", "OpenNIC", "SmartViper", "Dyn",
             "FreeDNS", "Alternate DNS", "Yandex.DNS", "UncensoredDNS",
             "Hurricane Electric", "puntCAT", "Neustar", "Cloudflare",
             "Fourth Estate"]

ips = ["209.244.0.3", "64.6.64.6", "8.8.8.8", "9.9.9.9", "84.200.69.80",
       "8.26.56.26", "208.67.222.222", "199.85.126.10", "81.218.119.11",
       "195.46.39.39", "69.195.152.204", "208.76.50.50", "216.146.35.35",
       "37.235.1.174", "198.101.242.72", "77.88.8.8", "91.239.100.100",
       "74.82.42.42", "109.69.8.51", "156.154.70.1", "1.1.1.1", "45.77.165.194"]

#Use a for loop to create a dictionary mapping the provider names to their IPs.

dic = {k:v for k,v in zip(providers, ips)}

print(dic["Hurricane Electric"])
#Print Hurricane Electric's IPs using the dictionary.

#Use a for loop to create a list of dictionaries with the associated information.

#create dictionary within list_of_dicts

list_of_dicts = [{} for isp in providers]
print(list_of_dicts)

for dicts in list_of_dicts:
    #append k:v
    #loop through lists to pull values
    for k,v in dic.items():
        dicts["provider"] = [k]
print(list_of_dicts)

Вот мой вывод:

74.82.42.42
[{}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}]
[{'provider': ['Neustar']}, {'provider': ['Neustar']}, {'provider': ['Neustar']}, {'provider': ['Neustar']}, {'provider': ['Neustar']}, {'provider': ['Neustar']}, {'provider': ['Neustar']}, {'provider': ['Neustar']}, {'provider': ['Neustar']}, {'provider': ['Neustar']}, {'provider': ['Neustar']}, {'provider': ['Neustar']}, {'provider': ['Neustar']}, {'provider': ['Neustar']}, {'provider': ['Neustar']}, {'provider': ['Neustar']}, {'provider': ['Neustar']}, {'provider': ['Neustar']}, {'provider': ['Neustar']}, {'provider': ['Neustar']}, {'provider': ['Neustar']}, {'provider': ['Neustar']}]

Ожидаемый результат:

[{'provider_name': 'Level3'}, {'primary_server': '209.244.0.3'}, ...]

Ответы [ 4 ]

0 голосов
/ 31 декабря 2018

Итерация по индексу, без почтового индекса.Я также предлагаю вернуть один диктовку, например:

res = {}
for i in range(len(providers)):
  res[providers[i]] = ips[i]

#=> {'Level3': '209.244.0.3', 'Verisign': '64.6.64.6',  ....

Где вы можете легко получить ip как:

print(res['Hurricane Electric']) #=> 74.82.42.42


Или, альтернативно:
res_alt = []
for i in range(len(providers)):
  res_alt.append({'provider_name':providers[i], 'primary_server': ips[i]})

print(res_alt)
#=> [{'provider_name': 'Level3', 'primary_server': '209.244.0.3'}, {'provider_name': 'Verisign', 'primary_server': '64.6.64.6'}, ...
0 голосов
/ 31 декабря 2018

Я думаю, что это то, что вы хотите:

# Use a for loop to create a list of dictionaries with the associated information.
providers = ["Level3", "Verisign", "Google", "Quad9", "DNS.WATCH",
             "Comodo Secure DNS", "OpenDNS Home", "Norton ConnectSafe",
             "GreenTeamDNS", "SafeDNS", "OpenNIC", "SmartViper", "Dyn",
             "FreeDNS", "Alternate DNS", "Yandex.DNS", "UncensoredDNS",
             "Hurricane Electric", "puntCAT", "Neustar", "Cloudflare",
             "Fourth Estate"]

ips = ["209.244.0.3", "64.6.64.6", "8.8.8.8", "9.9.9.9", "84.200.69.80",
       "8.26.56.26", "208.67.222.222", "199.85.126.10", "81.218.119.11",
       "195.46.39.39", "69.195.152.204", "208.76.50.50", "216.146.35.35",
       "37.235.1.174", "198.101.242.72", "77.88.8.8", "91.239.100.100",
       "74.82.42.42", "109.69.8.51", "156.154.70.1", "1.1.1.1", "45.77.165.194"]

#Use a for loop to create a dictionary mapping the provider names to their IPs.

#create dictionary within list_of_dicts

list_of_dicts = []
for k, v in zip(providers, ips):
    list_of_dicts.extend([{'provider': k}, {'primary_server': v}])

print(list_of_dicts)

Вывод:

[{'provider': 'Level3'}, {'primary_server': '209.244.0.3'}, {'provider': 'Verisign'}, {'primary_server': '64.6.64.6'}, {'provider': 'Google'}, {'primary_server': '8.8.8.8'}, {'provider': 'Quad9'}, {'primary_server': '9.9.9.9'}, {'provider': 'DNS.WATCH'}, {'primary_server': '84.200.69.80'}, {'provider': 'Comodo Secure DNS'}, {'primary_server': '8.26.56.26'}, {'provider': 'OpenDNS Home'}, {'primary_server': '208.67.222.222'}, {'provider': 'Norton ConnectSafe'}, {'primary_server': '199.85.126.10'}, {'provider': 'GreenTeamDNS'}, {'primary_server': '81.218.119.11'}, {'provider': 'SafeDNS'}, {'primary_server': '195.46.39.39'}, {'provider': 'OpenNIC'}, {'primary_server': '69.195.152.204'}, {'provider': 'SmartViper'}, {'primary_server': '208.76.50.50'}, {'provider': 'Dyn'}, {'primary_server': '216.146.35.35'}, {'provider': 'FreeDNS'}, {'primary_server': '37.235.1.174'}, {'provider': 'Alternate DNS'}, {'primary_server': '198.101.242.72'}, {'provider': 'Yandex.DNS'}, {'primary_server': '77.88.8.8'}, {'provider': 'UncensoredDNS'}, {'primary_server': '91.239.100.100'}, {'provider': 'Hurricane Electric'}, {'primary_server': '74.82.42.42'}, {'provider': 'puntCAT'}, {'primary_server': '109.69.8.51'}, {'provider': 'Neustar'}, {'primary_server': '156.154.70.1'}, {'provider': 'Cloudflare'}, {'primary_server': '1.1.1.1'}, {'provider': 'Fourth Estate'}, {'primary_server': '45.77.165.194'}]

Я думаю, с результатами будет легче работать, если вы создадите один словарь для каждого провайдеракоторые имели отдельные ключи для каждого поля.

Другими словами что-то вроде:

[{'provider': 'Level3', 'primary_server': '209.244.0.3'},
 {'provider': 'Verisign', 'primary_server': '64.6.64.6'},
 {'provider': 'Google', 'primary_server': '8.8.8.8'},
 {'provider': 'Quad9', 'primary_server': '9.9.9.9'},
 {'provider': 'DNS.WATCH'}, 'primary_server': '84.200.69.80'},
 {'provider': 'Comodo Secure DNS', 'primary_server': '8.26.56.26'},
 ...etc
]

Или, в зависимости от того, что вы собираетесь делать, возможно, один словарь, содержащий всеиз них вот так:

{'Level3': '209.244.0.3',
 'Verisign': '64.6.64.6',
 'Google': '8.8.8.8',
 'Quad9': '9.9.9.9',
 'DNS.WATCH': '84.200.69.80',
 'Comodo Secure DNS': '8.26.56.26',
 ...etc
}
0 голосов
/ 31 декабря 2018

Может быть, это поможет:

dic = [{k:v} for k,v in zip(providers,ips)]
0 голосов
/ 31 декабря 2018
providers = ["Level3", "Verisign", "Google", "Quad9", "DNS.WATCH",
             "Comodo Secure DNS", "OpenDNS Home", "Norton ConnectSafe",
             "GreenTeamDNS", "SafeDNS", "OpenNIC", "SmartViper", "Dyn",
             "FreeDNS", "Alternate DNS", "Yandex.DNS", "UncensoredDNS",
             "Hurricane Electric", "puntCAT", "Neustar", "Cloudflare",
             "Fourth Estate"]
ips = ["209.244.0.3", "64.6.64.6", "8.8.8.8", "9.9.9.9", "84.200.69.80",
       "8.26.56.26", "208.67.222.222", "199.85.126.10", "81.218.119.11",
       "195.46.39.39", "69.195.152.204", "208.76.50.50", "216.146.35.35",
       "37.235.1.174", "198.101.242.72", "77.88.8.8", "91.239.100.100",
       "74.82.42.42", "109.69.8.51", "156.154.70.1", "1.1.1.1", "45.77.165.194"]
dic = [{i[0]:i[1]} for i in zip(providers,ips)]

Сейчас dic равно [{'Level3': '209.244.0.3'}, {'Verisign': '64.6.64.6'}, {'Google': '8.8.8.8'}, ...]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...