Pregunta

En php, uno puede manejar una lista de nombres de estado y sus abreviaturas con una matriz asociativa como esta:

<?php
    $stateArray = array(
        "ALABAMA"=>"AL",
        "ALASKA"=>"AK",
        // etc...
        "WYOMING"=>"WY"
    );

    foreach ($stateArray as $stateName => $stateAbbreviation){
        print "The abbreviation for $stateName is $stateAbbreviation.\n\n";
    }
?>

Salida (con el orden de las teclas preservado):

The abbreviation for ALABAMA is AL.

The abbreviation for ALASKA is AK.

The abbreviation for WYOMING is WY.

EDITAR: tenga en cuenta que el orden de los elementos de la matriz se conserva en la salida de la versión php. La implementación de Java, utilizando un HashMap, no garantiza el orden de los elementos. Tampoco el diccionario en Python.

¿Cómo se hace esto en Java y Python? Solo encuentro enfoques que proporcionan el valor, dada la clave, como python:

stateDict = {
    "ALASKA": "AK",
    "WYOMING": "WY",
}

for key in stateDict:
    value = stateDict[key]

EDITAR: según las respuestas, esta fue mi solución en python,

# a list of two-tuples
stateList = [
    ('ALABAMA', 'AL'),
    ('ALASKA', 'AK'),
    ('WISCONSIN', 'WI'),
    ('WYOMING', 'WY'),
]

for name, abbreviation in stateList:
    print name, abbreviation

Salida:

ALABAMA AL
ALASKA AK
WISCONSIN WI
WYOMING WY

Que es exactamente lo que se requería.

¿Fue útil?

Solución

en Python:

for key, value in stateDict.items(): # .iteritems() in Python 2.x
    print "The abbreviation for %s is %s." % (key, value)

en Java:

Map<String,String> stateDict;

for (Map.Entry<String,String> e : stateDict.entrySet())
    System.out.println("The abbreviation for " + e.getKey() + " is " + e.getValue() + ".");

Otros consejos

en java para la matriz asociativa use Map

import java.util.*;

class Foo
{
    public static void main(String[] args)
    {
        Map<String, String> stateMap = new HashMap<String, String>();
        stateMap.put("ALABAMA", "AL");
        stateMap.put("ALASKA", "AK");
        // ...
        stateMap.put("WYOMING", "WY");

        for (Map.Entry<String, String> state : stateMap.entrySet()) {
             System.out.printf(
                "The abbreviation for %s is %s%n",
                state.getKey(),
                state.getValue()
            );
        }
    }
}

Además, para mantener el orden de inserción, puede usar LinkedHashMap en lugar de HashMap.

En python, un diccionario ordenado está disponible en Python 2.7 (no aún lanzado) y Python 3.1. Se llama OrderedDict.

Este es el código modificado de o948 donde usa un TreeMap en lugar de un HashMap. El mapa de árbol preservará el orden de las claves por clave.

import java.util.*;

class Foo
{
 public static void main(String[] args)
 {
    Map<String, String> stateMap = new TreeMap<String, String>();
    stateMap.put("ALABAMA", "AL");
    stateMap.put("ALASKA", "AK");
    // ...
    stateMap.put("WYOMING", "WY");

    for (Map.Entry<String, String> state : stateMap.entrySet()) {
             System.out.printf(
                    "The abbreviation for %s is %s%n",
                    state.getKey(),
                    state.getValue()
            );
      }
    }
 }

Otra forma de hacerlo en Java. Aunque ya se ha publicado una mejor manera, esta está sintácticamente más cerca de su código php.

for (String x:stateDict.keySet()){
        System.out.printf("The abbreviation for %s is %s\n",x,stateDict.get(x));
    }

En la línea de la respuesta de Alejandro ...

El diccionario nativo de Python no mantiene el orden para la máxima eficiencia de su uso principal: una asignación desordenada de claves a valores.

Puedo pensar en dos soluciones:

  1. mire el código fuente de OrderedDict e inclúyalo en su propio programa.

  2. haga una lista que contenga las teclas en orden:

    states = ['Alabamba', 'Alaska', ...]  
    statesd = {'Alabamba':'AL', 'Alaska':'AK', ...}
    for k in states:
        print "The abbreviation for %s is %s." % (k, statesd[k])
    

TreeMap no es una respuesta a su pregunta porque clasifica los elementos por clave, mientras que LinkedHashMap conserva el orden original. Sin embargo, TreeMap es más adecuado para el diccionario debido a la clasificación.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top