java和python相当于php';s foreach($key=>;$value作为数组)
在php中,可以使用如下关联数组处理状态名称及其缩写的列表:java和python相当于php';s foreach($key=>;$value作为数组),java,php,python,associative-array,Java,Php,Python,Associative Array,在php中,可以使用如下关联数组处理状态名称及其缩写的列表: <?php $stateArray = array( "ALABAMA"=>"AL", "ALASKA"=>"AK", // etc... "WYOMING"=>"WY" ); foreach ($stateArray as $stateName => $stateAbbreviation){ pri
<?php
$stateArray = array(
"ALABAMA"=>"AL",
"ALASKA"=>"AK",
// etc...
"WYOMING"=>"WY"
);
foreach ($stateArray as $stateName => $stateAbbreviation){
print "The abbreviation for $stateName is $stateAbbreviation.\n\n";
}
?>
编辑:请注意,数组元素的顺序保留在php版本的输出中。使用HashMap的Java实现不能保证元素的顺序。Python中的字典也没有
这在java和python中是如何实现的?我只发现在给定键的情况下提供值的方法,比如python:
stateDict = {
"ALASKA": "AK",
"WYOMING": "WY",
}
for key in stateDict:
value = stateDict[key]
编辑:根据答案,这是我的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() + ".");
Map stateDict;
对于(Map.Entry e:stateDict.entrySet())
System.out.println(““+e.getKey()+”的缩写是“+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()
);
}
}
}
import java.util.*;
福班
{
公共静态void main(字符串[]args)
{
Map stateMap=newhashmap();
州地图。put(“阿拉巴马州”、“阿尔卑斯州”);
州地图。放置(“阿拉斯加”、“AK”);
// ...
州地图。放置(“怀俄明州”、“怀俄明州”);
对于(Map.Entry状态:stateMap.entrySet()){
System.out.printf(
“%s的缩写为%s%n”,
state.getKey(),
state.getValue()
);
}
}
}
另一种在Java中实现的方法。虽然已经发布了一个更好的方法,但是这个方法在语法上更接近您的php代码
for (String x:stateDict.keySet()){
System.out.printf("The abbreviation for %s is %s\n",x,stateDict.get(x));
}
另外,为了保持插入顺序,可以使用LinkedHashMap而不是HashMap。在python中,python 2.7(尚未发布)和python 3.1中提供了一个。它被称为OrderedDict。这是o948中修改过的代码,在这里您使用树映射而不是哈希映射。树映射将按键保留键的顺序
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()
);
}
}
}
import java.util.*;
福班
{
公共静态void main(字符串[]args)
{
Map stateMap=newtreemap();
州地图。put(“阿拉巴马州”、“阿尔卑斯州”);
州地图。放置(“阿拉斯加”、“AK”);
// ...
州地图。放置(“怀俄明州”、“怀俄明州”);
对于(Map.Entry状态:stateMap.entrySet()){
System.out.printf(
“%s的缩写为%s%n”,
state.getKey(),
state.getValue()
);
}
}
}
按照亚历山大的回答
本机python字典并没有为其主要用途的最大效率维护排序:键到值的无序映射
我可以想出两个变通办法:
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更适合于词典。非常感谢您的帮助。关于Java版本,我想当然地认为May.Entry只是拼写错误。对于一个整理代码的新手来说,即使有一个小的打字错误,也会让人感到困惑。假设stateDict实际上是一张地图,安全吗?HashMap?thanx,已修复。stateDict是一个映射如果需要保持元素的顺序,请使用
LinkedHashMap
。谢谢CD1的建议。同时,使用字典的python版本也不保留顺序。有什么想法吗?:)根据定义,Python指令是无序的。如果您想要python中的有序数据,请查看列表或其他数据结构。感谢提供清晰的示例!它编译并运行,正是我所期望的。你的回答帮助我整理出newacct的速记版本。坦白地说,如果没有你的代码,我会迷路很长一段时间。哎呀,注意到HashMap没有保留元素的顺序。但LinkedHashMap确实如此!这看起来很有趣,运行也很好,但我承认我需要一点时间来整理它!:)谢谢你的例子。是的,LinkedHashMap看起来正是我需要的。编译、运行并保留顺序。那是小费!你的建议解决了Java版本的问题,你能推荐一个替代品来替换acct的python版本中的字典吗?它也不能维持秩序…谢谢你的提示!我开始觉得我的问题可能没有答案。不过,如果php的foreach($array as$key=>$value)确实不能在python中实现,我承认我很苦恼。恐怕我不明白为什么有序键字典在检索时一定会失去顺序。这令人困惑。现在我想我正在寻找解决办法。@Lasoldo Solsifa:当你说“有序键词典”时,你是指有序的dict实例还是普通的Python dict?因为一个普通的Python dict从来没有对键进行过排序——规范中说键可以按任何顺序返回。不同之处在于PHP实际上使用关联数组,而Python使用哈希表。它们很相似,但并不完全相同。在《不懂Python的Python》一书中,我从Alexander Ljungberg对我的问题的回答中了解到了即将出版的有序词典。我只是在寻找一个关联数组,从中我可以按照插入键的顺序检索键。我将研究你关于2元组列表的建议。谢谢你的帮助。我想标准字典不是因为性能原因订购的。使用字典最常用的方法不是逐项检查,而是在需要时查找个别项目。如果您只想按字母顺序显示字典,则可以使用“for key,value in(key,stateDict[key]for key in sorted(stateDict.keys()):”谢谢你的帮助。对我问题的回答还表明LinkedHashMap会保留元素顺序,所以我喜欢你,只是我用LinkedHashMap代替了HashMap。你的也可以,所以现在我可以在两种解决方案中选择!哎呀。Pilgrim指出了树映射