java и эквивалент python для foreach php ($ array как $ key => $ value)

В php можно обрабатывать список имен состояний и их аббревиатуры с помощью ассоциативного массива следующим образом:

<?php $stateArray = array( "ALABAMA"=>"AL", "ALASKA"=>"AK", // etc... "WYOMING"=>"WY" ); foreach ($stateArray as $stateName => $stateAbbreviation){ print "The abbreviation for $stateName is $stateAbbreviation.\n\n"; } ?> 

Выход (с сохранением ключа):

 The abbreviation for ALABAMA is AL. The abbreviation for ALASKA is AK. The abbreviation for WYOMING is WY. 

EDIT: Обратите внимание, что порядок элементов массива сохраняется на выходе версии php. Реализация Java с использованием HashMap не гарантирует порядок элементов. Словарь в Python также не используется.

Как это делается в java и python? Я только нахожу подходы, которые поставляют значение, учитывая ключ, как и python:

 stateDict = { "ALASKA": "AK", "WYOMING": "WY", } for key in stateDict: value = stateDict[key] 

EDIT: на основе ответов это было моим решением в python,

 # a list of two-tuples stateList = [ ('ALABAMA', 'AL'), ('ALASKA', 'AK'), ('WISCONSIN', 'WI'), ('WYOMING', 'WY'), ] for name, abbreviation in stateList: print name, abbreviation 

Вывод:

 ALABAMA AL ALASKA AK WISCONSIN WI WYOMING WY 

Именно это и требовалось.

в Python:

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

в Java:

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

в java для использования ассоциативного массива Карта

 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() ); } } } 

Кроме того, для поддержания порядка вставки вы можете использовать LinkedHashMap вместо HashMap.

В python упорядоченный словарь доступен в Python 2.7 (еще не выпущен) и Python 3.1. Это называется OrderedDict.

Другой способ сделать это в Java. Хотя лучший способ уже опубликован, этот синтаксически ближе к вашему php-коду.

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

Это модифицированный код из o948, где вы используете TreeMap вместо HashMap. Карта дерева сохранит порядок ключей клавишей.

 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() ); } } } 

По линии ответа Александра …

Собственный словарь python не поддерживает порядок максимальной эффективности его первичного использования: неупорядоченное отображение ключей в значения.

Я могу подумать о двух обходных решениях:

  1. посмотрите исходный код OrderedDict и включите его в свою собственную программу.

  2. составить список, в котором хранятся ключи:

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

TreeMap не является ответом на ваш вопрос, потому что он сортирует элементы по ключу, а LinkedHashMap сохраняет исходный порядок. Однако TreeMap более подходит для словаря из-за сортировки.