如何将python dict对象转换为java等效对象?

时间:2009-07-01 23:20:44

标签: java python hashmap dictionary

我需要将python代码转换为等效的java代码。 Python通过提供许多快捷功能,使开发人员的生活变得非常轻松。但是现在我需要将它迁移到Java。我想知道java中dict对象的等价物是什么?我尝试过使用HashMap,但生活很糟糕。首先考虑一下,

#  Nodes is a dictionary -> Key : (Name, Strength)
for node, (name, strength) in nodes.items():
    nodes[node] = (name, new_strength)

那么如何将其转换为Java呢? 对于初学者我使用了HashMap对象,

Map<Integer, List> nodesMap = new HashMap<Integer,List>();
/* For iterating over the map */
Iterator updateNodeStrengthIterator = nodesMap.entrySet().iterator(); 
while(updateNodeStrengthIterator.hasNext()){ }    

我的问题在于获取包含Name&amp;的List部分。力量&amp;然后更新强度部分。有没有可行的方法呢?我应该考虑一些不同的数据结构吗?请帮忙。

3 个答案:

答案 0 :(得分:4)

为(Name,Strength)元组创建一个类可能最简单:

class NameStrength {
    public String name;
    public String strength;
}

如果合适,添加getter,setter和构造函数。

然后您可以在地图中使用新课程:

Map<Integer, NameStrength> nodesMap = new HashMap<Integer, NameStrength>();

在Java 5及更高版本中,您可以像这样迭代:

for (NameStrength nameStrength : nodesMap.values()) {}

或者像这样:

for (Entry<Integer, NameStrength> entry : nodesMap.entrySet()) {}

答案 1 :(得分:3)

总是jython。 这里有一点来自this article,它提供了python / java

的良好并排视图
  

Jython类似于Java   集合类更多   紧密融入核心   语言,允许更简洁   描述和有用的功能。   例如,注意区别   在Java代码之间:

map = new HashMap();
map.put("one",new Integer(1));
map.put("two",new Integer(2));
map.put("three",new Integer(3));

System.out.println(map.get("one"));

list = new LinkedList();
list.add(new Integer(1));
list.add(new Integer(2));
list.add(new Integer(3));
     

和Jython代码:

map = {"one":1,"two":2,"three":3}
print map ["one"]
list = [1, 2, 3]

<小时/> 编辑:使用put()替换值有什么问题?

map.put(key,new_value);

这是一个小例子程序:

static public void main(String[] args){
    HashMap<String,Integer> map = new HashMap<String,Integer>();
     //name, age
    map.put("billy", 21);
    map.put("bobby", 19);
    year(map);
    for(String i: map.keySet()){
        System.out.println(i+ " " + map.get(i).toString());
    }
}
// a year has passed
static void year(HashMap<String,Integer> m){
    for(String k: m.keySet()){
        m.put(k, m.get(k)+1);
    }
}

答案 2 :(得分:1)

Java没有相当于内置的元组。您必须创建一个将两者封装在一起以模仿它的类。