Étant donné un dictionnaire

  x = {'b': {d}, 'a': {'b', 'c'}, 'd': {'g'}, 'f': {'d', 'g'}, 'c': {'e', 'f'}, 'e': {d}}

Je veux une fonction qui imprimera:

  a -> ['b', 'c']
  b -> ['d']
  c -> ['e', 'f']
  d -> ['g']
  e -> ['d']
  f -> ['d', 'g']

J'ai écrit ceci:

def graph_as_str(graph : {str:{str}}) -> str:
    graphString = ''
    for key in sorted(graph):
        graphString += '  {} -> ['.format(key)
        for value in sorted(graph[key]):
            graphString += '\'{}\', '.format(value)
        graphString = graphString[:-2]
        graphString += ']\n'
    return graphString

Cela fonctionne mais est horrible. Comment puis-je améliorer cela?

0
Upstreamer 6 mars 2016 à 08:04

4 réponses

Meilleure réponse

En supposant que vous vouliez dire que votre mission était la suivante:

x = {'b': {'d'}, 'a': {'b', 'c'}, 'd': {'g'}, 'f': {'d', 'g'}, 'c': {'e', 'f'}, 'e': {'d'}}

(Les valeurs associées aux clés 'b' et 'e' sont entre guillemets, et la valeur associée à la clé 'a' est {'b', 'c'}, pas {'c', 'd'})

Ensuite, cela donnera la sortie que vous avez répertoriée:

for k in sorted(x.keys()):
    print("{} -> {}".format(k, sorted(list(x[k]))))
0
jfsturtz 6 mars 2016 à 05:16

OP a demandé une fonction et a donné un format précis:

x = {'b': {'d'}, 'a': {'c', 'b'}, 'd': {'g'}, 'f': {'d', 'g'}, 'c': {'e', 'f'}, 'e': {'d'}}

def graph_as_str(graph: {str:{str}}) -> str:
    return "\n".join("  {} -> {}".format(key, sorted(value)) for key, value in sorted(graph.items()))
0
cdlane 6 mars 2016 à 05:37
x = {'b': {'d'}, 'a': {'c', 'd'}, 'd': {'g'}, 'f': {'d', 'g'}, 'c': {'e', 'f'}, 'e': {'d'}}


def graph_as_str(x):
    sorted_x = sorted(x)

    for i in x:
        print i, "-->", list(x[i])

J'espère que cela résout ce dont vous avez besoin et est beaucoup plus simple. Prendre plaisir!!!!

0
Henin RK 6 mars 2016 à 05:22

En supposant que d doit également être cité:

x = {'b': {'d'}, 'a': {'c', 'b'}, 'd': {'g'}, 'f': {'d', 'g'}, 
    'c': {'e', 'f'}, 'e': {'d'}}

x_str = '\n'.join([key + ' -> ' + str(sorted(list(val))) 
                   for key, val in sorted(x.iteritems())])
print(x_str)    
0
Simon Fromme 6 mars 2016 à 05:28