2 votes

Comment créer un dict à partir d'une liste de composants - python

J'ai une liste de dates :

dates = ['2018-11-13 ', '2018-11-14 ']

et j'ai une liste de données météorologiques pour différentes villes :

weather_data = [('Carbondale', 1875.341, '2018-11-13 '), ('Carbondale', 1286.16, '2018-11-14 '), ('Davenport', 708.5, '2018-11-13 '), ('Davenport', 506.1, '2018-11-14 ')]

i[1] dans weather_data est un score climatique sur la base des informations climatiques de chaque jour. J'ai raccourci les listes ci-dessus pour les besoins de cet exemple.

Mon objectif est de trouver la ville dont le score climatique est le plus bas pour chaque jour. . J'ai pensé qu'une bonne façon de le faire serait de les mettre dans un dictionnaire.

Voici un exemple de ce que je veux...

conditions_dict = {'2018-11-13': ('Carbondale',1875.341), ('Davenport', 708.5)}

et mon résultat final serait...

The best weather on 2018-11-13 is in Davenport with a value of 708.5

En fait, si j'avais un dict avec une date comme clé et (ville,valeur) comme valeur, je pourrais facilement trouver la valeur la plus basse par ville pour chaque jour.

Cependant, je ne parviens pas à trouver un moyen de faire ressembler mon dictionnaire à celui-ci. La partie qui me pose vraiment problème est de savoir comment faire correspondre la date à plusieurs lectures pour différentes villes le même jour.

L'utilisation d'un dictionnaire est-elle une bonne façon de procéder ?

2voto

blhsing Points 57682

Vous n'avez pas vraiment besoin d'un dict intermédiaire contenant toutes les villes et tous les scores pour chaque date si votre objectif est de trouver le score minimum et la ville de chaque date, puisque vous pouvez simplement itérer à travers weather_data et de garder trace du score le plus bas jusqu'à présent et de la ville associée pour chaque date d'une dictée :

min_score_of_date = {}
for city, score, date in weather_data:
    if date not in min_score_of_date or score < min_score_of_date.get(date)[1]:
        min_score_of_date[date] = (city, score)

Compte tenu de votre exemple d'entrée, min_score_of_date deviendrait :

{'2018-11-13 ': ('Davenport', 708.5), '2018-11-14 ': ('Davenport', 506.1)}

1voto

Baryon Points 112

C'est une autre façon de procéder si les dates des températures les plus basses n'ont pas encore été filtrées pour vous.

# each date has a tuple of cities and their temperature
conditions = {
    '2018-11-13': (
        ('Carbondale',1875.341),
        ('Davenport', 708.5)
    )
}

# loop through every date
for date, cities in conditions.items():
    # for every date, loop through its values
    # grab its temperateure and add to the list
    # them find the minimun temperature

    # get all tempertures
    tempertures = [_[1] for _ in cities]
    # get minimum temperature
    min_temperture = min(tempertures)

    # loop throught all cities
    for city in cities:
        # if a city matches min_temperature do whats bellow
        if min_temperture in city:
            # city name
            name = city[0]
            # city temperture
            temperture = str(city[1])

            print(
                "The best weather on "\
                + date\
                + "is in "\
                + name + " with a value of "\
                + temperture
            )

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X