Pregunta sobre Test Dome.
Implemente una función group_by_owners que:
Acepta un diccionario que contiene el nombre del propietario del archivo para cada nombre de archivo.
Devuelve un diccionario que contiene una lista de nombres de archivo para cada nombre de propietario, en cualquier orden.
Por ejemplo, para el diccionario {'Input.txt': 'Randy', 'Code.py': 'Stan', 'Output.txt': 'Randy'}
la función group_by_owners
debería devolver {'Randy': ['Input.txt', 'Output.txt'], 'Stan': ['Code.py']}
.
Cuando ejecuto el código a continuación que desarrollé mientras hacía la prueba de ejemplo, obtuve un puntaje de 0% por su aplicación en línea y si ejecuta el código siguiente en su IDE, genera el diccionario transformado correcto.
¿Por qué su sitio no da marcas para las pruebas desarrolladas? ¿Es esto un error con sus algoritmos que detectan si el código es correcto en su sitio? ¿O estoy haciendo algo incorrectamente aquí?
Mi comprensión de Python es de aprox. 2 años de experiencia
'''Find all unique names given a dict'''
def getUniqueNames(file):
file_owner_names = []
for file_type, file_o in file.items():
if file_o not in file_owner_names:
file_owner_names.append(file_o)
return file_owner_names
'''Get a list of files for an owner given a dict and owner'''
def getFileArray(file, file_owner):
file_type_names = []
for file_t, file_o in file.items():
if file_o == file_owner:
if file_t not in file_type_names:
file_type_names.append(file_t)
return file_type_names
'''Learned to used the dict'''
def group_by_owners(files_dict):
new_file = {}
i = 0
file_owner_names = getUniqueNames(files_dict)
for file_owner_name in file_owner_names:
if i != len(file_owner_names):
if (i < len(file_owner_names)):
new_file[file_owner_name] = str(getFileArray(files_dict,
file_owner_name))
i = i + 1
return new_file
files = {
'Input.txt': 'Randy',
'Code.py': 'Stan',
'HomeController.py': 'Randy',
'Output.txt': 'Jeff',
'SearchController.py': 'Rafeena',
'ABTest.py': 'Nicholas',
'SQL.py':'Nicholas'
}
print(group_by_owners(files))
Salida del script de python anterior:
{'Randy': "['Input.txt', 'HomeController.py']", 'Stan': "['Code.py']", 'Jeff': "['Output.txt']", 'Rafeena': "['SearchController.py']", 'Nicholas': "['ABTest.py', 'SQL.py']"}
4 respuestas
No lo he probado, pero creo que tu problema es que deberías cambiar
new_file[file_owner_name] = str(getFileArray(files_dict, file_owner_name))
Para
new_file[file_owner_name] = getFileArray(files_dict, file_owner_name)
Eliminando la llamada a str
.
La salida debería ser:
{'Randy': ['Input.txt', 'HomeController.py'], 'Stan': ['Code.py'], 'Jeff': ['Output.txt'], 'Rafeena': ['SearchController.py'], 'Nicholas': ['ABTest.py', 'SQL.py']}
Observe la falta de comillas alrededor de las listas.
No exactamente responde a su pregunta, pero esta solución utiliza un diccionario estándar.
def group_by_owners(files):
grouped_files = {}
for key, value in sorted(files.items()):
grouped_files.setdefault(value, []).append(key)
return grouped_files
#prints {'Stan': ['Code.py'], 'Randy': ['Input.txt', 'Output.txt']}
Basé mi respuesta en un ejemplo que se encuentra aquí: StackOverflow
También puede probar el siguiente enfoque simple para obtener el resultado requerido
def group_by_owners(files):
my_dict = {}
for key,value in files.items():
if value in my_dict:
my_dict[value].append(key)
else:
my_dict[value] = [key]
return my_dict
files = {'Input.txt': 'Randy', 'Code.py': 'Stan', 'Output.txt': 'Randy'}
print(group_by_owners(files))
# Prints {'Randy': ['Input.txt', 'Output.txt'], 'Stan': ['Code.py']}
Puede usar defaultdict de colecciones. Defaultdict se encarga de agregar una nueva clave.
from collections import defaultdict
d = {'Input.txt': 'Randy', 'Code.py': 'Stan', 'Output.txt': 'Randy'}
o = defaultdict(list)
for k, v in d.items():
o[v] += [k]
print(dict(o))
# prints {'Randy': ['Input.txt', 'Output.txt'], 'Stan': ['Code.py']}
Preguntas relacionadas
Preguntas vinculadas
Nuevas preguntas
python
Python es un lenguaje de programación multipropósito, de tipificación dinámica y de múltiples paradigmas. Está diseñado para ser rápido de aprender, comprender y usar, y hacer cumplir una sintaxis limpia y uniforme. Tenga en cuenta que Python 2 está oficialmente fuera de soporte a partir del 01-01-2020. Aún así, para preguntas de Python específicas de la versión, agregue la etiqueta [python-2.7] o [python-3.x]. Cuando utilice una variante de Python (por ejemplo, Jython, PyPy) o una biblioteca (por ejemplo, Pandas y NumPy), inclúyala en las etiquetas.