将数据结构从元组字典切换到字典字典

2024-05-02 05:05:20 发布

您现在位置:Python中文网/ 问答频道 /正文

#Queries
espanol_3d_gtmax = Funcion.objects.filter(fecha_inicio__lte=today, fecha_fin__gte=today, idpelicula__slug=slugpelicula, idciudad=city, visible=1, idioma="Espanol", tipo_3d=1, gtmax=1, xd=None, vip=None)
espanol_3d = Funcion.objects.filter(fecha_inicio__lte=today, fecha_fin__gte=today, idpelicula__slug=slugpelicula, idciudad=city, visible=1, idioma="Espanol", tipo_3d=1, gtmax=None, xd=None, vip=None)
espanol_3d_vip = Funcion.objects.filter(fecha_inicio__lte=today, fecha_fin__gte=today, idpelicula__slug=slugpelicula, idciudad=city, visible=1, idioma="Espanol", tipo_3d=1, vip=1, gtmax=None, xd=None)
espanol_3d_xd = Funcion.objects.filter(fecha_inicio__lte=today, fecha_fin__gte=today, idpelicula__slug=slugpelicula, idciudad=city, visible=1, idioma="Espanol", tipo_3d=1, xd=1, gtmax=None, vip=None)
espanol_gtmax = Funcion.objects.filter(fecha_inicio__lte=today, fecha_fin__gte=today, idpelicula__slug=slugpelicula, idciudad=city, visible=1, idioma="Espanol", gtmax=1, tipo_3d=None, vip=None, xd=None)
espanol = Funcion.objects.filter(fecha_inicio__lte=today, fecha_fin__gte=today, idpelicula__slug=slugpelicula, idciudad=city, visible=1, idioma="Espanol", gtmax=None, tipo_3d=None, vip=None, xd=None)
espanol_vip = Funcion.objects.filter(fecha_inicio__lte=today, fecha_fin__gte=today, idpelicula__slug=slugpelicula, idciudad=city, visible=1, idioma="Espanol", vip=1, gtmax=None, tipo_3d=None, xd=None)
espanol_xd = Funcion.objects.filter(fecha_inicio__lte=today, fecha_fin__gte=today, idpelicula__slug=slugpelicula, idciudad=city, visible=1, idioma="Espanol", xd=1, vip=None, gtmax=None, tipo_3d=None)
subtitulada_3d_gtmax = Funcion.objects.filter(fecha_inicio__lte=today, fecha_fin__gte=today, idpelicula__slug=slugpelicula, idciudad=city, visible=1, idioma="Subtitulada", tipo_3d=1, gtmax=1, xd=None, vip=None)
subtitulada_3d = Funcion.objects.filter(fecha_inicio__lte=today, fecha_fin__gte=today, idpelicula__slug=slugpelicula, idciudad=city, visible=1, idioma="Subtitulada", tipo_3d=1,  gtmax=None, xd=None, vip=None)
subtitulada_3d_vip = Funcion.objects.filter(fecha_inicio__lte=today, fecha_fin__gte=today, idpelicula__slug=slugpelicula, idciudad=city, visible=1, idioma="Subtitulada", tipo_3d=1, vip=1, gtmax=None, xd=None)
subtitulada_3d_xd = Funcion.objects.filter(fecha_inicio__lte=today, fecha_fin__gte=today, idpelicula__slug=slugpelicula, idciudad=city, visible=1, idioma="Subtitulada", tipo_3d=1, xd=1, vip=None, gtmax=None)
subtitulada_gtmax = Funcion.objects.filter(fecha_inicio__lte=today, fecha_fin__gte=today, idpelicula__slug=slugpelicula, idciudad=city, visible=1, idioma="Subtitulada", gtmax=1, tipo_3d=None, xd=None, vip=None)
subtitulada = Funcion.objects.filter(fecha_inicio__lte=today, fecha_fin__gte=today, idpelicula__slug=slugpelicula, idciudad=city, visible=1, idioma="Subtitulada", gtmax=None, tipo_3d=None, vip=None, xd=None)
subtitulada_vip = Funcion.objects.filter(fecha_inicio__lte=today, fecha_fin__gte=today, idpelicula__slug=slugpelicula, idciudad=city, visible=1, idioma="Subtitulada", vip=1, gtmax=None, tipo_3d=None, xd=None)
subtitulada_xd = Funcion.objects.filter(fecha_inicio__lte=today, fecha_fin__gte=today, idpelicula__slug=slugpelicula, idciudad=city, visible=1, idioma="Subtitulada", xd=1, vip=None, gtmax=None, tipo_3d=None)

#Creating a dictionary of all types of funciones querysets
func_tags = ['espanol', 'subtitulada', 'espanol_3d', 'subtitulada_3d', 'espanol_3d_gtmax', 'espanol_vip', 'espanol_xd', 'subtitulada_3d_gtmax', 'subtitulada_3d_vip',
 'espanol_3d_vip', 'espanol_3d_xd', 'espanol_gtmax', 'subtitulada_3d_xd', 'subtitulada_gtmax', 'subtitulada_vip', 'subtitulada_xd']
func_all = [espanol, subtitulada, espanol_3d, subtitulada_3d, espanol_3d_gtmax, espanol_vip, espanol_xd, subtitulada_3d_gtmax, subtitulada_3d_vip, espanol_3d_vip, espanol_3d_xd,
espanol_gtmax, subtitulada_3d_xd, subtitulada_gtmax, subtitulada_vip, subtitulada_xd]

funciones = dict(zip(func_tags, func_all))

#Removing empty element from funciones dictionary
for x in list(funciones.keys()):
    if not (funciones[x]).exists():
        del funciones[x]

cine_tags = []

for key, value in funciones.iteritems():
    for item in value:
        cine_tags.append(item.idcine.nombre)

cine_tags_unique = list(set(cine_tags))
horarios = {}

for cine in cine_tags_unique:
    horarios[cine] = []

#Appending func_tags and funciones to the horarios dictionary organized by cine
for key, value in funciones.iteritems():
    for item in value:
        for in_key, value in horarios.iteritems():
            if in_key == item.idcine.nombre:
                horarios[in_key].append((key, item))

其他信息:

函数:一个django查询集,表示电影在另一部电影中的放映时间。你知道吗

函数选项的类型:

['espanol', 'subtitulada', 'espanol_3d', 'subtitulada_3d', 'espanol_3d_gtmax', 'espanol_vip', 'espanol_xd', 'subtitulada_3d_gtmax', 'subtitulada_3d_vip','espanol_3d_vip', 'espanol_3d_xd', 'espanol_gtmax', 'subtitulada_3d_xd', 'subtitulada_gtmax', 'subtitulada_vip', 'subtitulada_xd']

电影院选项:

[u'Cinemark Plaza de las Americas', u'Cineplex', u'Multicines CCI', u'Supercines Quicentro Sur', u'Supercines San Luis', u'Multicines Recreo', u'Multicines Scala', u'Mis Cines', u'Multicines Condado']

现在我有一个元组字典,结构如下:

'Movie theather': [(type_of_funcion, funcion_object), (type_of_funcion, funcion_object)], 'Another Movie Theater': [(type_of_funcion, funcion_object)],...

我现在拥有的dict示例数据如下所示:

{u'Cinemark Plaza de las Americas': [('subtitulada_3d', <Funcion: Cinemark Plaza de las Americas, Funcion #540: The Hobbit: An Unexpected Journey>), ('subtitulada_3d', <Funcion: Cinemark Plaza de las Americas, Funcion #541: The Hobbit: An Unexpected Journey>), ('subtitulada_3d', <Funcion: Cinemark Plaza de las Americas, Funcion #542: The Hobbit: An Unexpected Journey>), ('espanol_3d', <Funcion: Cinemark Plaza de las Americas, Funcion #548: The Hobbit: An Unexpected Journey>), ('espanol_3d', <Funcion: Cinemark Plaza de las Americas, Funcion #549: The Hobbit: An Unexpected Journey>), ('espanol_3d', <Funcion: Cinemark Plaza de las Americas, Funcion #550: The Hobbit: An Unexpected Journey>), ('espanol', <Funcion: Cinemark Plaza de las Americas, Funcion #530: The Hobbit: An Unexpected Journey>), ('espanol', <Funcion: Cinemark Plaza de las Americas, Funcion #531: The Hobbit: An Unexpected Journey>), ('espanol', <Funcion: Cinemark Plaza de las Americas, Funcion #532: The Hobbit: An Unexpected Journey>), ('espanol', <Funcion: Cinemark Plaza de las Americas, Funcion #533: The Hobbit: An Unexpected Journey>), ('subtitulada', <Funcion: Cinemark Plaza de las Americas, Funcion #508: The Hobbit: An Unexpected Journey>), ('subtitulada', <Funcion: Cinemark Plaza de las Americas, Funcion #509: The Hobbit: An Unexpected Journey>), ('subtitulada', <Funcion: Cinemark Plaza de las Americas, Funcion #510: The Hobbit: An Unexpected Journey>), ('subtitulada', <Funcion: Cinemark Plaza de las Americas, Funcion #511: The Hobbit: An Unexpected Journey>)], u'Cineplex': [('subtitulada_3d', <Funcion: Cineplex, Funcion #454: The Hobbit: An Unexpected Journey>), ('subtitulada_3d', <Funcion: Cineplex, Funcion #455: The Hobbit: An Unexpected Journey>), ('subtitulada_3d', <Funcion: Cineplex, Funcion #456: The Hobbit: An Unexpected Journey>), ('espanol_3d', <Funcion: Cineplex, Funcion #451: The Hobbit: An Unexpected Journey>), ('espanol_3d', <Funcion: Cineplex, Funcion #452: The Hobbit: An Unexpected Journey>), ('espanol_3d', <Funcion: Cineplex, Funcion #453: The Hobbit: An Unexpected Journey>)], u'Multicines CCI': [('espanol_3d', <Funcion: Multicines CCI, Funcion #158: The Hobbit: An Unexpected Journey>), ('espanol_3d', <Funcion: Multicines CCI, Funcion #160: The Hobbit: An Unexpected Journey>), ('espanol_3d', <Funcion: Multicines CCI, Funcion #165: The Hobbit: An Unexpected Journey>), ('espanol_3d', <Funcion: Multicines CCI, Funcion #166: The Hobbit: An Unexpected Journey>), ('espanol_3d', <Funcion: Multicines CCI, Funcion #168: The Hobbit: An Unexpected Journey>), ('espanol', <Funcion: Multicines CCI, Funcion #431: The Hobbit: An Unexpected Journey>), ('espanol', <Funcion: Multicines CCI, Funcion #434: The Hobbit: An Unexpected Journey>), ('espanol', <Funcion: Multicines CCI, Funcion #436: The Hobbit: An Unexpected Journey>), ('espanol', <Funcion: Multicines CCI, Funcion #438: The Hobbit: An Unexpected Journey>), ('espanol', <Funcion: Multicines CCI, Funcion #439: The Hobbit: An Unexpected Journey>)]}

问题是我有类似这样的“重复”函数类型:

{u'Cinemark Plaza de las Americas': [('subtitulada_3d', <Funcion: Cinemark Plaza de las Americas, Funcion #540: The Hobbit: An Unexpected Journey>), ('subtitulada_3d', <Funcion: Cinemark Plaza de las Americas, Funcion #541: The Hobbit: An Unexpected Journey>), ('subtitulada_3d', <Funcion: Cinemark Plaza de las Americas, Funcion #542: The Hobbit: An Unexpected Journey>), ('espanol_3d', <Funcion: Cinemark Plaza de las Americas, Funcion #548: The Hobbit: An Unexpected Journey>),

与此相反,我想按属于电影院的功能类型进行分组,如下所示:

{u'Cinemark Plaza de las Americas': { {'subtitulada': Funcion1, Funcion2, Funcion3}, {'subtitulada_3d': Funcion4, Fucion5} }, next_movie_theather: {},...}

你有什么想法可以实现这个目标吗? 谢谢


Tags: thenoneantodayvipjourneyxdhobbit
1条回答
网友
1楼 · 发布于 2024-05-02 05:05:20

您可以使用简单的词典理解在一行中进行这样的转换:

d = {"a": [(1, "x"), (2, "y")], "b": [(10, "w"), (1, "z")]}

new_d = {k: dict(v) for k, v in d.items()}

print new_d
# {'a': {1: 'x', 2: 'y'}, 'b': {1: 'z', 10: 'w'}}

相关问题 更多 >