#python #python-3.x #dictionary #list-comprehension
#python #python-3.x #словарь #список-понимание
Вопрос:
Я хочу применить понимание словаря к заголовку и разнице в дате публикации и дате изменения.
def vid(videos):
diff_date = [(x.trending_date - x.publish_date).days for x in videos]
dct = {x.title : (x.trending_date - x.publish_date).days for x in videos}
print(diff_date)
print(dct)
Часть выходных данных diff_date дает:
[1, 1, 2, 1, 2, 1, 2, 2, 1, 1, 1, 1, 1, 2, 2, 1, 2, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 1, 1, 2361, 1, 8, 4, 2, 2, 207, 2, 1, 2, 1, 1, 2, 1, 3, 3, 2, 1, 4, 1, 4, 3, 2, 3, 4, 3, 4, 3, 2, 1, 3, 3, 1, 4, 4, 2, 4, 3, 4, 1, 4, 5, 3, 4, 3, 4, 4, 4, 4, 4, 28, 3, 4, 4, 2, 3, 3, 5, 5, 3, 4, 2, 4, 2, 5, 5, 4, 4, 4, 5, 4, 5, 5, 4, 5, 4, 4, 4, 4, 5, 4, 4, 4, 5, 5, 5, 4, 5, 5, 5, 5, 4, 5, 5, 5, 5, 4, 4, 4, 5, 5, 6, 5, 4, 5, 4,....
Часть выходных dct
данных дает:
{'WE WANT TO TALK ABOUT OUR MARRIAGE': 7, 'The Trump Presidency: Last Week Tonight with John Oliver (HBO)': 7, 'Racist Superman | Rudy Mancuso, King Bach amp; Lele Pons': 8, 'Nickelback Lyrics: Real or Fake?': 7, 'I Dare You: GOING BALD!?': 7, '2 Weeks with iPhone X': 7, 'Roy Moore amp; Jeff Sessions Cold Open - SNL': 6, '5 Ice Cream Gadgets put to the Test': 7, 'The Greatest Showman | Official Trailer 2 [HD] | 20th Century FOX': 2, 'Why the rise of the robots won’t mean the end of work': 2, "Dion Lewis' 103-Yd Kick Return TD vs. Denver! | Can't-Miss Play | NFL Wk 10 Highlights": 1,......
Как вы можете видеть, значение the dct
дает другое значение, чем в выводе diff_date
. Чего я ожидал, так это:
{'WE WANT TO TALK ABOUT OUR MARRIAGE': 1, 'The Trump Presidency: Last Week Tonight with John Oliver (HBO)': 1, 'Racist Superman | Rudy Mancuso, King Bach amp; Lele Pons': 2, 'Nickelback Lyrics: Real or Fake?': 1, 'I Dare You: GOING BALD!?': 2.......
Я не уверен, почему это дает другое значение. Я ожидаю, что значение останется неизменным, верно?
* Обратите внимание, что входными данными для функции являются объекты класса Video
Комментарии:
1. Попробуйте сравнить
dct
с[(x.name, (x.trending_date - x.publish_date).days) for x in videos]
, и вы будете просветлены.2. У вас есть повторяющиеся упоминания одного и того же названия? если это так, значение более позднего ключа перезапишет более раннее
Ответ №1:
Это потому, что словари python не организованы по порядку. Я могу заверить вас, что они имеют правильное значение, но порядок немного запутан. Вы можете использовать этот код для решения этой проблемы
from collections import OrderedDict
def vid(videos):
dct = OrderedDict()
diff_date = [(x.trending_date - x.publish_date).days for x in videos]
for x in videos:
dct[x.title] = (x.trending_date - x.publish_date).days
print(diff_date)
print(dct)
Это словарь порядка. Это занимает больше места, но сохраняет упорядоченность. Для получения дополнительной информации ознакомьтесь здесь