(Python) Извлечь значение в диктанте в списке - PullRequest
0 голосов
/ 08 апреля 2020

Здравствуйте , я делаю новый проект с ботом Discord для игры (iRacing), чтобы хранить информацию во время гонки. Я использую pyirsdk, и я смотрю весь исходный код, чтобы попытаться понять, как он работает. Тем не менее, у меня есть диктат в списке, и я заблокирован.


DriverInfo: 

{

    'DriverHeadPosX': -0.579,
    'DriverHeadPosY': 0.398,
    'DriverHeadPosZ': 0.571,

    'Drivers': 

    [

    {'CarIdx': 0, 'UserName': 'Enzo Foucaud', 'AbbrevName': '', 'Initials': '', 'UserID': 409133, 'TeamID': 0, 'TeamName': 'Enzo Foucaud', 'CarNumber': '64', 'CarNumberRaw': 64, 'CarPath': 'mercedesamggt3', 'CarClassID': 0, 'CarID': 72, 'CarIsPaceCar': 0, 'CarIsAI': 0, 'CarScreenName': 'Mercedes AMG GT3', 'CarScreenNameShort': 'Mercedes AMG GT3', 'CarClassShortName': None, 'CarClassRelSpeed': 0, 'CarClassLicenseLevel': 0, 'CarClassMaxFuelPct': '1.000 %', 'CarClassWeightPenalty': '0.000 kg', 'CarClassPowerAdjust': '0.000 %', 'CarClassColor': 16777215, 'IRating': 1, 'LicLevel': 1, 'LicSubLevel': 1, 'LicString': 'R 0.01', 'LicColor': '0xundefined', 'IsSpectator': 0, 'CarDesignStr': '1,dff000,1a4b9b,ffffff', 'HelmetDesignStr': '1,dff000,1a4b9b,ffffff', 'SuitDesignStr': '1,dff000,1a4b9b,ffffff', 'CarNumberDesignStr': '0,0,FFFFFF,777777,000000', 'CarSponsor_1': 0, 'CarSponsor_2': 0, 'CurDriverIncidentCount': 0, 'TeamIncidentCount': 0}

    ]

}

Я делаю это, чтобы узнать, существует или нет 'UserName'

DriversInfo_list = ir['DriverInfo']
print('DriverInfo:', DriversInfo_list)
    for i in DriversInfo_list:
        if i == 'Drivers':
            print("Drivers Exists")
            SoloDriver = DriversInfo_list['Drivers']
            print(SoloDriver)
            if [d['UserName'] for d in SoloDriver if 'UserName' in d]:
                print('Username Exists')

Консоль:

DriverInfo: {...}
Drivers Exists
[{'CarIdx': 0, ...}]
Username Exists

Теперь я хочу извлечь много информации о «Водители» (dict) в DriverInfo, который является списком. Например, я хочу значение UserName, но я не знаю, как я могу это сделать. Я ищу весь день .. ^^ Я делаю много уроков, чтобы попробовать это ^^

Спасибо за ваш ответ

Ответы [ 2 ]

1 голос
/ 08 апреля 2020

Предположим, что каждый драйвер в списке Drivers имеет одинаковые ключи. Иначе скинет KeyError. Чтобы избежать этой ошибки, проверьте, существует ли ключ в лямбде.

drivers = ir['DriverInfo']['Drivers']
result = list(map((lambda x: x['UserName']), drivers))
1 голос
/ 08 апреля 2020

Зависит от того, содержат ли все элементы DriversInfo только один словарь в ключе драйвера. Но вы можете сделать как:

DriversInfo_list = ir['DriverInfo']
for soloDriverInfo in DriversInfo_list['Drivers']:
    #Iterate in list of driver key
    print(f"username: {soloDriverInfo['UserName']}, car: {soloDriverInfo['CarScreenName']}") 
...