Entonces, el código en el que estoy trabajando es para un bot de IRC y quiero implementar una forma de limitar los canales según la CHANLIMIT
opción del servidor.
La CHANLIMIT
opción es una lista de límites con el prefijo y el límite separados por :
, pero si no hay nada después, :
entonces no hay límite.
La solución a continuación funciona, pero estoy buscando mejoras.
result = ['#+:2', '&:']
channels = ['#test1', '#test2', '+test3', '&test4']
prefix_groups = [(prefix, []) for prefix in result]
channel_groups = {k: v for (k, v) in prefix_groups}
for channel in channels:
for group in prefix_groups:
if channel[0] in group[0]:
channel_groups[group[0]].append(channel)
break
for prefix, channels in channel_groups.items():
limit = prefix.split(':')[1]
if limit:
if len(channels) > int(limit):
channel_groups[prefix] = channels[:int(limit)]
channels = [
channel for chanlist in channel_groups.values() for channel in chanlist]
print(channels)
Podemos ir más lejos:
Solucion 2
import itertools
results = ['#+:2', '&:']
channels_to_test = ['#test1', '#test2', '+test3', '&test4',
'#test5', '!test5', '&test6', '&test7',
'+test8', '#test9']
channel_groups = {group: [channel for channel in channels_to_test
if channel[0] in group]
for group in results}
limit = lambda prefix: prefix.split(':')[1]
modified_channel_groups = {prefix: channels[:int(limit(prefix))]
for (prefix, channels) in channel_groups.items()
if limit(prefix)}
channel_groups.update(modified_channel_groups)
result_channels = list(itertools.chain.from_iterable(channel_groups.values()))
print(result_channels)
Pero aquí tengo que hacer una suposición: supongo que un canal puede coincidir como máximo con un elemento de results
. En otras palabras, no hay dos elementos de results
coincidirán con el mismo canal. Dime si esto no es cierto para tu situación.
Estos son los cambios que hice:
channel_groups
usando una comprensión de diccionario donde el valor de cada elemento es una comprensión de listamodified_channel_groups
que contiene los elementos channel_groups
que se han acortadochannel_groups
con los demodified_channel_groups
modified_channel_groups
la definición de.result_channels
usandoitertools.chain.from_iterable()
Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.
En caso de infracción, por favor [email protected] Eliminar
Déjame decir algunas palabras