При записи значений в список словарей почему-то некоторые значения записываются неправильно
При записи значений в список словарей почему-то некоторые значения записываются неправильно. У меня есть список словарей пользователей который имеет вид припусти такой:
{"name": "Mary", "time_created": 1664850742, "city": null}
{"name": "Debbie", "time_created": 1665310450, "city": "NY"}
{"name": "Jeannie", "time_created": 1665333931, "gender": "female", "ip":"226.21.69.204"}
{"name": "Sanjuanita", "time_created": 1665102705, "gender": "female", "city": "NY"}
из него я вытаскиваю все уникальные ключи с помощью кода и переношу им некоторые значения:
for obj in lst:
for key, value in obj.items():
if value is not None:
total[key] = total.get(key, []) + [value]
for key, value in total.items():
if type(total[key][0]) == int:
total[key] = sum(total[key]) / len(total[key])
total[key] = int(total[key])
elif type(total[key][0]) == float:
total[key] = sum(total[key]) / len(total[key])
elif type(total[key][0]) == str:
freq = collections.Counter(total[key])
total[key] = max(freq.items(), key=lambda elem: elem[1])[0]
else:
total[key] = None
после чего добавляю значения в список словарей описанный ранне:
for k, v in total.items():
for val in lst:
if k not in val.keys():
val[k] = total[k]
elif val[k] is None:
val[k] = total[k]
но сам список почему то выглядит не так а именно один ключ принимает не правильные значение и это ключ 'premium' вместо None он иногда принимает 'user_id' после чего юзер может выглядеть так:
{'name': 'Timothy', 'time_created': 1665297492, 'gender': 'male', 'city': 'NY', 'premium': 8097, 'age': 38, 'last_name': 'Smith', 'ip': '192.168.0.110', 'birth_day': '01.01', 'balance': 55.43255500944704, 'user_id': 8097}
сама функция добавления user_id выглядит вот так:
def user_id_fun():
usr_id = 1
for val in result:
for key in val:
if val[key] == val['user_id']:
val[key] = usr_id
usr_id = usr_id + 1
в чем может заключаться ошибка?
Ответы (1 шт):
нашел ответ, ошибка заключалась в то что функция принимает TRUE за значение 1 то есть айди пользователя именно по-этому у тех пользователей у которых ключ 'premium' был со значением TRUE оно записывало их найди вместо того чтоб оставить TRUE исправило ошибку прописанные функции вот так:
for val in result:
if val['user_id']:
val['user_id'] = usr_id
usr_id = usr_id + 1