2014-02-25 10 views
0

我在两个文件中有两个列表(输入)Alpha和Beta。 [值以制表符分隔。现在我显示它与=符号分开]。两个列表之间的比较。是否有可能获得列出的输出?

Alpha: 
x=1 
y=2 
z=3 

Beta: 
y=2 
a=1 
x=1 
z=4 

我想获得类似这样的输出:
阿尔法贝塔VS
|   -   | a = 1 |
| z = 3 | z = 4 |

编辑:程序会检查第一个数据(x)是否存在于两者中。如果不存在,它将在输出中列出。如果存在,它会检查值是否相同。如果值不相同,它将在输出中列出。
ie;
它会在两种情况下打印输出。
1.如果一个键(x或y或任何)在Alpha和Beta中都不存在。
2.如果键值不匹配在Alpha或Beta中

我尝试过使用shell脚本..但是无法完成它!
所以如果是shell/python会对我更好。

但我欢迎这方面的任何语言:)

+0

u能解释其输出是怎么来FRM输入列表 – Kick

+0

确定。我将编辑该问题。 – smilyface

+0

这些是从一个看起来像这样的文件输入的吗? – Hoopdady

回答

1

你说值是制表符分隔,所以我所做的工作脚本关闭该。如果他们是=分开,你将不得不改变分割。我也跳过任何不会与tryexcept区块分开的行。它可能不是最高效的代码,但它完成了工作。

with open('input.txt') as f: 
    isBeta = False 
    beta = {} 
    alpha = {} 
    for line in f: 
     if line.strip() == 'Beta:': 
      isBeta = True 
      continue 
     elif line.strip() == 'Alpha:' or not line.strip(): 
      continue 


     try: 
      k,v = line.split() 
     except: 
      continue 
     if isBeta: 
      beta[k] = v 
     else: 
      alpha[k] = v 

    for k in sorted(set(alpha.keys()+beta.keys())): 
     if k not in alpha: 
      print '| -- | ' + k + '=' + beta[k] + '|' 
     elif k not in beta: 
      print '|' + k + '=' + alpha[k] + ' | -- |' 
     elif alpha[k] == beta[k]: 
      continue 
     else: 
      print '|' + k + '=' + alpha[k] + ' | ' + k + '=' + beta[k] + '|' 
+0

我也使用了shell脚本。感谢这个答案。帮了我很多! – smilyface

1

转换列表映射

Map<String,String> listToMap(List<String> list){ 

    Map<String,String> map = new HashMap<>(); 

    for (String str : list) { 
    String[] array= str.split(`=`); 
    if (array.length != 2) continue; //ignore invalid line 
    map.put(array[0],array[1]); 

    } 
    return map; 
    } 

那么你的列表转换为地图

Map<String,String> mapA = listToMap(Alpha); 
Map<String,String> mapB = listToMap(Beta); 

创建加入专用话机,

Set<String> keyset = new HashSet<>(); 
keyset.addAll(mapA.keySet()); 
keyset.addAll(mapB.keySet()); 

,然后只有你所剩下的东西就是要比较你的列表/映射

for (String key : keyset) 
{ 
String valueA = mapA.get(key); 
System.out.print(valueA ==null?"---":valueA); 
System.out.print(" | "); 
String valueB = mapB.get(key); 
System.out.print(valueB ==null?"---":valueBA); 
System.out.print("\n"); 
} 
+0

忘记了这个也对'Java'开放。自从我看到它以来已经有一段时间了。面向对象的极端。 'System.out.print' :-) – Hoopdady

+0

没关系Hoopdady。你的脚本非常好。我正在尝试使用真实的数据。我认为这是打破了! – smilyface

+0

@smilyface是否打破我的脚本? – Hoopdady