Python 如何将词典附加到词典中?
我正试图循环浏览一份玩家列表,将他们的统计数据作为字典。但我没能把格式弄对,弄得乱七八糟 我缺少什么来获得我想要的输出:Python 如何将词典附加到词典中?,python,dictionary,Python,Dictionary,我正试图循环浏览一份玩家列表,将他们的统计数据作为字典。但我没能把格式弄对,弄得乱七八糟 我缺少什么来获得我想要的输出: { Player1: {stat1: 1, stat2: 2, etc,etc} Player2: {stat1: 1, stat2: 2, etc,etc} Player3: {stat1: 1, stat2: 2, etc,etc} } import request from bs4 import BeautifulSoup as soup from pprint i
{
Player1: {stat1: 1, stat2: 2, etc,etc}
Player2: {stat1: 1, stat2: 2, etc,etc}
Player3: {stat1: 1, stat2: 2, etc,etc}
}
import request
from bs4 import BeautifulSoup as soup
from pprint import pprint
player_name = ['Bernd Leno',
'Emiliano Martínez',
'Matt Macey',
'Héctor Bellerín']
for i in player_name:
player_page = requests.get('https://www.premierleague.com/players/10483/{}/stats'.format(i))
cont = soup(player_page.content, 'lxml')
data = dict((k.contents[0].strip(), v.get_text(strip=True)) for k, v in zip(cont.select('.topStat span.stat, .normalStat span.stat'), cont.select('.topStat span.stat > span, .normalStat span.stat > span')))
player = {cont.select_one('.playerDetails .name').get_text(strip=True): data}
pprint(player)
将循环前的播放器声明为:
player = {}
然后在循环中执行以下操作:
player[playerName] = data
我已修改了您的代码以去除依赖项,并演示了您正在寻找的解决方案:
player_name = ['Bernd Leno', 'Emiliano Martnez', 'Matt Macey', 'Hctor Bellern']
player = {}
for i in player_name:
#player_page = requests.get('https://www.premierleague.com/players/10483/{}/stats'.format(i))
#cont = soup(player_page.content, 'lxml')
data = {"stat1": 1, "stat2": 2}
player[i] = data
print(player)
以及输出:
{'Hctor Bellern': {'stat2': 2, 'stat1': 1},
'Matt Macey': {'stat2': 2, 'stat1': 1},
'Bernd Leno': {'stat2': 2, 'stat1': 1},
'Emiliano Martnez': {'stat2': 2, 'stat1': 1}}
主要问题是,每个玩家都有不同的URL,因此为了正确地获取统计数据,有必要找出玩家id:
import requests
from bs4 import BeautifulSoup as soup
from pprint import pprint
players_url = [
'https://www.premierleague.com/players/4985/Bernd-Leno/stats',
'https://www.premierleague.com/players/4245/Emiliano-Mart%C3%ADnez/stats',
'https://www.premierleague.com/players/10422/Matt-Macey/stats',
'https://www.premierleague.com/players/4474/H%C3%A9ctor-Beller%C3%ADn/stats']
# this is dict where we store all information:
players = {}
for url in players_url:
player_page = requests.get(url)
cont = soup(player_page.content, 'lxml')
data = dict((k.contents[0].strip(), v.get_text(strip=True)) for k, v in zip(cont.select('.topStat span.stat, .normalStat span.stat'), cont.select('.topStat span.stat > span, .normalStat span.stat > span')))
players[cont.select_one('.playerDetails .name').get_text(strip=True)] = data
pprint(players)
印刷品:
{'Bernd Leno': {'Accurate long balls': '161',
'Appearances': '34',
'Assists': '0',
'Catches': '7',
'Clean sheets': '7',
'Errors leading to goal': '5',
'Fouls': '0',
'Goal Kicks': '248',
'Goals': '0',
'Goals conceded': '43',
'High Claims': '12',
'Losses': '8',
'Own goals': '0',
'Passes': '971',
'Passes per match': '28.56',
'Penalties saved': '0',
'Punches': '18',
'Red cards': '0',
'Saves': '110',
'Sweeper clearances': '14',
'Throw outs': '203',
'Wins': '19',
'Yellow cards': '0'},
'Emiliano Martínez': {'Accurate long balls': '28',
'Appearances': '6',
'Assists': '0',
'Catches': '2',
'Clean sheets': '3',
'Errors leading to goal': '0',
'Fouls': '1',
'Goal Kicks': '39',
'Goals': '0',
'Goals conceded': '7',
'High Claims': '13',
'Losses': '3',
'Own goals': '0',
'Passes': '124',
'Passes per match': '20.67',
'Penalties saved': '0',
'Punches': '1',
'Red cards': '0',
'Saves': '9',
'Sweeper clearances': '2',
'Throw outs': '30',
'Wins': '3',
'Yellow cards': '0'},
...etc.
列表、玩家姓名,或者您是指其他内容吗?谢谢,我错过了跳过最后一行,只参考玩家=数据。如果您只做
player=data
,那么您将替换先前玩家的数据,最终只获得一个玩家的数据。相反,您应该这样做(如答案所示):player[playerName]=data
确切地说,这是演示的@5个元素!嗨,Andrej,我解决了url问题,将所有玩家的名字提取到一个列表中,然后使用.format(player_name),这是因为通用url。我遇到的问题是,措辞的格式是正确的。感谢您提供的解决方案!保留玩家id是个好主意,因为玩家的名字不一定是唯一的。