Словарь Python и список в цикле for - PullRequest
0 голосов
/ 12 октября 2018

мой код похож на это

for dict_item in data:
    MILLISECONDS = dict_item['Start_Time'].split('(')[1][:-2]
    mydict = {'Cinema_Name':dict_item['Cinema_Name'],
              'Movie_Time':datetime.datetime.fromtimestamp(int(MILLISECONDS)/1000.0).strftime('%B-%d-%Y %I:%M %p'),
ListOfJson.append(mydict)

вывод такой:

 {
    "Cinema_Name": "Cinema 3",
    "Movie_Time": "October-13-2018 06:20 PM"
},
{
    "Cinema_Name": "Cinema 3",
    "Movie_Time": "October-13-2018 09:15 PM"
},
{
    "Cinema_Name": "Cinema 6",
    "Movie_Time": "October-12-2018 11:30 AM"
},
{
    "Cinema_Name": "Cinema 6",
    "Movie_Time": "October-12-2018 02:25 PM"
}

, но я хочу вывод, который объединит все с пришедшим Cinema_Name и поместит их время в список.что-то вроде этого

{
    "Cinema_Name": "Cinema 3"
    "Movie_Time": " ["October-13-2018 06:20 PM","October-13-2018 09:15 PM"]
},
{
    "Cinema_Name": "Cinema 6"
    "Movie_Time: ["October-12-2018 11:30 AM" ,"October-12-2018 02:25 PM"]

В любом случае, я могу это сделать?

Ответы [ 3 ]

0 голосов
/ 12 октября 2018

Создайте новый dict и создайте свой список.Нет необходимости в причудливом коде или парсинге List.Всего две строки кода: [obj["Movie_Time"] for obj in myDict if obj["Cinema_Name"] == "Cinema 3"] и еще одна для Cinema 6, как показано ниже.

myDict = [
    {
        "Cinema_Name": "Cinema 3",
        "Movie_Time": "October-13-2018 06:20 PM"
    },
    {
        "Cinema_Name": "Cinema 3",
        "Movie_Time": "October-13-2018 09:15 PM"
    },
    {
        "Cinema_Name": "Cinema 6",
        "Movie_Time": "October-12-2018 11:30 AM"
    },
    {
        "Cinema_Name": "Cinema 6",
        "Movie_Time": "October-12-2018 02:25 PM"
    }
]

ListOfJson = [
    {
        "Cinema_Name": "Cinema 3",
        "Movie_Time": [obj["Movie_Time"] for obj in myDict if obj["Cinema_Name"] == "Cinema 3"]
    },
    {
        "Cinema_Name": "Cinema 6",
        "Movie_Time": [obj["Movie_Time"] for obj in myDict if obj["Cinema_Name"] == "Cinema 6"]
    }
]

print(ListOfJson)

Вывод:

[
  {
    'Cinema_Name': 'Cinema 3',
    'Movie_Time': [
      'October-13-2018 06:20 PM',
      'October-13-2018 09:15 PM'
    ]
  },
  {
    'Cinema_Name': 'Cinema 6',
    'Movie_Time': [
      'October-12-2018 11:30 AM',
      'October-12-2018 02:25 PM'
    ]
  }
]

Разница между моим решением и одним из@blhsing таков: мой запускает только 3 процесса одновременно, что ускоряет скорость.enter image description here

Решение @blhsing имеет 5 процессов для 2 детей, что значительно замедляет вашу скорость.enter image description here

0 голосов
/ 12 октября 2018

Вы можете использовать временный диктат для индексации кинотеатров при переборе списка и иметь возможность добавлять время фильма:

temp_dict = {}
for dict_item in data:
    movie_time = datetime.datetime.fromtimestamp(int(MILLISECONDS)/1000.0).strftime('%B-%d-%Y %I:%M %p')
    if dict_item['Cinema_Name'] not in temp_dict:
        temp_dict[dict_item['Cinema_Name']] = {
            'Cinema_Name':dict_item['Cinema_Name'],
            'Movie_Time': []
        }
    temp_dict[dict_item['Cinema_Name']]['Movie_Time'].append(movie_time)

ListOfJson = list(temp_dict.values())
0 голосов
/ 12 октября 2018

Вы можете использовать dict для отслеживания списка Movie_Time для первой записи нового Cinema_Name, так что последующие записи того же Cinema_Name могут быть добавлены в тот же список:

ListOfJson = [
    {
        "Cinema_Name": "Cinema 3",
        "Movie_Time": "October-13-2018 06:20 PM"
    },
    {
        "Cinema_Name": "Cinema 3",
        "Movie_Time": "October-13-2018 09:15 PM"
    },
    {
        "Cinema_Name": "Cinema 6",
        "Movie_Time": "October-12-2018 11:30 AM"
    },
    {
        "Cinema_Name": "Cinema 6",
        "Movie_Time": "October-12-2018 02:25 PM"
    }
]
l = []
index = {}
for d in ListOfJson:
    if d['Cinema_Name'] in index:
        index[d['Cinema_Name']].append(d['Movie_Time'])
    else:
        index[d['Cinema_Name']] = d['Movie_Time'] = [d['Movie_Time']]
        l.append(d)
print(l)

При вводе сэмпла l станет:

[{'Cinema_Name': 'Cinema 3', 'Movie_Time': ['October-13-2018 06:20 PM', 'October-13-2018 09:15 PM']}, {'Cinema_Name': 'Cinema 6', 'Movie_Time': ['October-12-2018 11:30 AM', 'October-12-2018 02:25 PM']}]

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