【问题标题】:how to convert a python dict object to a java equivalent object? [duplicate]如何将 python dict 对象转换为 java 等效对象? [复制]
【发布时间】:2010-11-07 11:49:12
【问题描述】:

我需要将 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()){ }    

我的问题是获取包含名称和强度的列表部分,然后更新强度部分。有没有可行的方法来做到这一点?我应该考虑一些不同的数据结构吗?请帮忙。

【问题讨论】:

    标签: java python hashmap dictionary


    【解决方案1】:

    为 (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()) {}
    

    【讨论】:

    • 谢谢。那很有帮助。我只是希望得到更简洁的方法。
    • 嗯,很遗憾,简洁并不是 Java 的强项之一...
    【解决方案2】:

    嗯,总是有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);
        }
    }
    

    【讨论】:

    • 感谢您的提示。但由于某些限制,我无法使用 Jython。
    【解决方案3】:

    Java 没有等效的内置元组。您必须创建一个将两者封装在一起的类来模仿它。

    【讨论】:

      猜你喜欢
      • 2018-01-08
      • 1970-01-01
      • 2016-05-18
      • 2012-09-15
      • 1970-01-01
      • 1970-01-01
      • 2011-05-26
      • 1970-01-01
      相关资源
      最近更新 更多