Jump to content

Comparar dicionários com listas


gonca16
 Share

Recommended Posts

Boa Noite

O meu problema assim muito simplificado é que eu tenho um dicionário de condutores está aqui um exemplo:

{'Steven Neale': ['09:00', '02:10'], 'Ana Tavares': ['09:25', '04:45']}

e depois tenho uma lista com reservas:

[['Chris Cauly', '11:00', '11:30', 'baixa', '25'], ['Frank Gerry', '11:15', '11:45', 'belem', '40']

O que eu tenho de fazer é "casar" um condutor com uma reserva. Para uma reserva eu tenho de percorrer o dicionário para ver se algum condutor pode fazer aquela reserva perante uma condição os condutores nao podem ter mais de 5 horas no tempo acumulado que é o 2º elemento do valor ('Steven Neale': ['09:00','02:10'])

Alguem consegue dar uma ajuda?

Desde já Obrigado

Link to comment
Share on other sites

gonca16,

Tens que explicar melhor o que são os valores que dás para cada reserva:

[ 'Frank Guerry', # ok, é o nome
 '11:15',        # ?
 '11:45',        # ?
 'belem',        # zona?
 '40',           # ?
]

E no caso dos condutores, o 2º valor (ex.: 09:00) o que representa?

Link to comment
Share on other sites

condu = {'Steven Neale': ['09:00', '02:10'], 'Ana Tavares': ['09:25', '06:45'], 'Bna Tavares': ['09:25', '04:59'], 'Bna rffTavares': ['09:25', '06:59']}
for nome in condu.keys():
tempo = condu[nome][1]
tempototal = float(tempo[:2]) + float(tempo[3:])/60
if tempototal <= 5:
	print nome + ' pode ser contratado'
else:
	print nome + ' ultrapassa o limite'
def horareal(tempo):
       return float(tempo[:2]) + float(tempo[3:])/60
condufil = {}
for nome in condu.keys():

if float(horareal(condu[nome][1])) <  5:
	condufil[nome] = condu[nome]
print condufil # condufil é uma lista com condutores viáveis
Edited by jviana

Learning

  • VB.Net
  • HTML
  • C/C++

Link to comment
Share on other sites

jviana,

A ideia aqui era o gonca16 explicar-se melhor e não dar-lhe a solução (ou parte dela) de bandeja sem qualquer explicação.

Relativamente ao teu código, está ali um erro de indentação (provavelmente ao copiar o código para o post), mas o que queria salientar é que há uma forma melhor de escrever aqueles loops:

# em Python 2.x seria d.iteritems()
for k, v in d.items():
   # k é a chave
   # v é o valor
   # ...

Desta forma o código fica mais limpo e também mais rápido, pois desaparecem aqueles acessos aos valores através da chave (ie. condu[nome] seria apenas v).

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.