天道酬勤,学无止境

从字典列表中的字典列表中删除重复项(Remove duplicates from list of dictionaries within list of dictionaries)

问题

我有清单:

my_list = [{'date': '10.06.2016', 
            'account': [{'name': 'a'}, 
                        {'name': 'a'}, 
                        {'name': 'b'}, 
                        {'name': 'b'}]}, 
           {'date': '22.06.2016', 
            'account': [{'name': 'a'}, 
                        {'name': 'a'}]}]

我想从'account'中的字典列表中删除重复项:

my_list = [{'date': '10.06.2016', 
            'account': [{'name': 'a'}, 
                        {'name': 'b'}]}, 
           {'date': '22.06.2016', 
            'account': [{'name': 'a'}]}]

使用set ,出现以下错误:

类型错误:不可散列的类型:'dict'

有人可以帮我解决这个问题吗?

回答1

这种结构可能过于复杂,但它可以完成工作。

my_list = [{'date': '10.06.2016', 
            'account': [{'name': 'a'}, 
                        {'name': 'a'}, 
                        {'name': 'b'}, 
                        {'name': 'b'}]}, 
           {'date': '22.06.2016', 
            'account': [{'name': 'a'}, 
                        {'name': 'a'}]}]

>>> [{'date': date, 
      'account': [{'name': name} for name in group]
      } for group, date in zip([set(account.get('name') 
                                    for account in item.get('account')) 
                                for item in my_list], 
                               [d.get('date') for d in my_list])]
[{'account': [{'name': 'a'}, {'name': 'b'}], 'date': '10.06.2016'},
 {'account': [{'name': 'a'}], 'date': '22.06.2016'}]
回答2

集合只能有可散列的成员,列表和字典都没有 - 但可以检查它们是否相等。

你可以做

def without_duplicates(inlist):
    outlist=[]
    for e in inlist:
        if e not in outlist:
            outlist.append(e)
    return outlist

对于非常大的列表,这可能会很慢

回答3

试试这个代码:

for d in my_list:
    for k in d:
        if k == 'account':
            v = []
            for d2 in d[k]:
                if d2 not in v:
                    v.append(d2)
            d[k] = v

这是运行上面的代码段后得到的结果:

In [347]: my_list
Out[347]: 
[{'account': [{'name': 'a'}, {'name': 'b'}], 'date': '10.06.2016'},
 {'account': [{'name': 'a'}], 'date': '22.06.2016'}]
回答4
def deduplicate_account_names(l):
    for d in l:
        names = set(map(lambda d: d.get('name'), d['account']))
        d['account'] = [{'name': name} for name in names]

# even shorter:
# def deduplicate_account_names(l):
#     for d in l:
#         d['account'] = [{'name': name} for name in set(map(lambda d: d.get('name'), d['account']))]

my_list = [{'date': '10.06.2016',
            'account': [{'name': 'a'},
                        {'name': 'a'},
                        {'name': 'b'},
                        {'name': 'b'}]},
           {'date': '22.06.2016',
            'account': [{'name': 'a'},
                        {'name': 'a'}]}]

deduplicate_account_names(my_list)
print(my_list)

# [ {'date': '10.06.2016',
#    'account': [ {'name': 'a'},
#                 {'name': 'b'} ] },
#   {'date': '22.06.2016',
#    'account': [ {'name': 'a'} ] } ]

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 从列表中的嵌套字典中删除重复项(remove duplicates from nested dictionaries in list)
    问题 快速且非常基本的新手问题。 如果我有看起来像这样的字典列表: L = [] L.append({"value1": value1, "value2": value2, "value3": value3, "value4": value4}) 假设存在多个条目,其中 value3 和 value4 与其他嵌套字典相同。 我如何快速轻松地找到并删除那些重复的字典。 保持秩序并不重要。 谢谢。 编辑: 如果有五个输入,像这样: L = [{"value1": fssd, "value2": dsfds, "value3": abcd, "value4": gk}, {"value1": asdasd, "value2": asdas, "value3": dafdd, "value4": sdfsdf}, {"value1": sdfsf, "value2": sdfsdf, "value3": abcd, "value4": gk}, {"value1": asddas, "value2": asdsa, "value3": abcd, "value4": gk}, {"value1": asdasd, "value2": dskksks, "value3": ldlsld, "value4": sdlsld}] 输出应该是这样的: L = [{"value1": fssd,
  • 从python中的列表中删除重复的JSON对象(Remove duplicate JSON objects from list in python)
    问题 我有一个字典列表,其中一个特定值重复多次,我想删除重复的值。 我的列表: te = [ { "Name": "Bala", "phone": "None" }, { "Name": "Bala", "phone": "None" }, { "Name": "Bala", "phone": "None" }, { "Name": "Bala", "phone": "None" } ] 删除重复值的功能: def removeduplicate(it): seen = set() for x in it: if x not in seen: yield x seen.add(x) 当我调用此函数时,我得到了generator object 。 <generator object removeduplicate at 0x0170B6E8> 当我尝试遍历生成器时,出现TypeError: unhashable type: 'dict' 有没有办法删除重复的值或遍历生成器 回答1 您可以通过字典理解轻松地删除重复键,因为字典不允许重复键,如下所示- te = [ { "Name": "Bala", "phone": "None" }, { "Name": "Bala", "phone": "None" }, { "Name": "Bala", "phone": "None" }, {
  • 当只有一个键值不同时,从字典列表中删除重复项(Remove duplicates from a list of dictionaries when only one of the key values is different)
    问题 我已经看到了一些类似的答案,但是在这种情况下我找不到特定的东西: 我有一个这样的词典列表: [ {"element":Bla, "version":2, "date":"12/04/12"}, {"element":Bla, "version":2, "date":"12/05/12"}, {"element":Bla, "version":3, "date":"12/04/12"} ] 实际的词典中还有许多其他键,但是我想做的是删除所有具有除日期以外的完全相同的键对值的条目。 也就是说,删除所有重复项(由于日期不同,它们并不是真正精确的重复项)。 在这种情况下,我期望得到的是: [ {"element":Bla, "version":2, "date":"12/04/12"}, {"element":Bla, "version":3, "date":"12/04/12"} ] 回答1 您说字典中还有许多其他键未在问题中提及。 这是O(n)算法,可满足您的需求: >>> seen = set() >>> result = [] >>> for d in dicts: ... h = d.copy() ... h.pop('date') ... h = tuple(h.items()) ... if h not in seen: ... result.append(d)
  • 如何删除列表中的这些重复项(python)(How to remove these duplicates in a list (python))
    问题 biglist = [ {'title':'U2 Band','link':'u2.com'}, {'title':'ABC Station','link':'abc.com'}, {'title':'Live Concert by U2','link':'u2.com'} ] 我想删除列表中的第三个元素......因为它有“u2.com”作为副本。 我不想要重复的“链接”元素。 执行此操作的最有效代码是什么,从而导致: biglist = [ {'title':'U2','link':'u2.com'}, {'title':'ABC','link':'abc.com'} ] 我尝试了很多方法,包括使用许多嵌套的“for ...in ....”,但这非常低效且时间过长。 回答1 您可以对列表进行排序,使用每个字典的link字段作为排序键,然后遍历列表一次并删除重复项(或者更确切地说,创建一个删除重复项的新列表,就像 Python 习惯用法一样),如下所示: # sort the list using the 'link' item as the sort key biglist.sort(key=lambda elt: elt['link']) newbiglist = [] for item in biglist: if newbiglist == [] or item[
  • 在Python列表中删除重复的字典(Remove duplicate dict in list in Python)
    问题 我有一个字典列表,我想删除具有相同键和值对的字典。 对于此列表: [{'a': 123}, {'b': 123}, {'a': 123}] 我想返回这个: [{'a': 123}, {'b': 123}] 另一个例子: 对于此列表: [{'a': 123, 'b': 1234}, {'a': 3222, 'b': 1234}, {'a': 123, 'b': 1234}] 我想返回这个: [{'a': 123, 'b': 1234}, {'a': 3222, 'b': 1234}] 回答1 尝试这个: [dict(t) for t in {tuple(d.items()) for d in l}] 该策略是将字典列表转换为元组列表,其中元组包含字典项。 由于元组可以被散列,因此您可以使用set删除重复项(在这里使用set理解,将set(tuple(d.items()) for d in l)较旧的python替代set(tuple(d.items()) for d in l) ),然后,重新创建元dict 。 在哪里: l是原始清单 d是列表中的词典之一 t是根据字典创建的元组之一 编辑:如果要保留顺序,则上面的单行将不起作用,因为set不会那样做。 但是,通过几行代码,您也可以做到这一点: l = [{'a': 123, 'b': 1234}, {'a': 3222, 'b
  • 删除列表中的重复项(Removing duplicates in the lists)
    问题 我几乎需要编写一个程序来检查列表中是否有重复项,如果删除了重复项,则将其删除,并返回一个包含未重复项/已删除项的新列表。 这是我尝试过的方法,但老实说,我不知道该怎么办。 def remove_duplicates(): t = ['a', 'b', 'c', 'd'] t2 = ['a', 'c', 'd'] for t in t2: t.append(t.remove()) return t 回答1 获取唯一项目集合的常见方法是使用集合。 集是不同对象的无序集合。 要从任何迭代创建集合,只需将其传递给内置的set()函数即可。 如果以后再次需要真实列表,则可以类似地将集合传递给list()函数。 下面的示例应涵盖您尝试执行的所有操作: >>> t = [1, 2, 3, 1, 2, 5, 6, 7, 8] >>> t [1, 2, 3, 1, 2, 5, 6, 7, 8] >>> list(set(t)) [1, 2, 3, 5, 6, 7, 8] >>> s = [1, 2, 3] >>> list(set(t) - set(s)) [8, 5, 6, 7] 从示例结果中可以看出,原始订单未得到维护。 如上所述,集合本身是无序集合,因此顺序丢失。 将集合转换回列表时,将创建任意顺序。 维持秩序 如果订单对您很重要,那么您将不得不使用其他机制。
  • Python删除组合字典列表中的重复值(Python remove duplicate value in a combined dictionary's list)
    问题 我需要一点家庭作业的帮助。 我必须编写一个将多个字典组合成新字典的函数。 如果一个键出现不止一次; 新字典中对应于该键的值应该是一个唯一的列表。 作为一个例子,这是我迄今为止所拥有的: f = {'a': 'apple', 'c': 'cat', 'b': 'bat', 'd': 'dog'} g = {'c': 'car', 'b': 'bat', 'e': 'elephant'} h = {'b': 'boy', 'd': 'deer'} r = {'a': 'adam'} def merge(*d): newdicts={} for dict in d: for k in dict.items(): if k[0] in newdicts: newdicts[k[0]].append(k[1]) else: newdicts[k[0]]=[k[1]] return newdicts combined = merge(f, g, h, r) print(combined) 输出看起来像: {'a': ['apple', 'adam'], 'c': ['cat', 'car'], 'b': ['bat', 'bat', 'boy'], 'e' : ['大象'], 'd': ['狗', '鹿']} 在“b”键下,“bat”出现两次。 如何删除重复项? 我查看了过滤器
  • 在Python中,什么时候使用字典,列表或集合?(In Python, when to use a Dictionary, List or Set?)
    问题 我什么时候应该使用字典,列表或集合? 是否存在更适合每种数据类型的方案? 回答1 list保留顺序,而dict和set则不保留:因此,当您关心顺序时,必须使用list (如果容器的选择当然仅限于这三个;-)。 dict每个键与一个值相关联,而list和set仅包含值:很明显,用例非常不同。 set要求项目是可哈希的, list则不是:如果您有不可哈希的项目,则不能使用set而必须使用list 。 set禁止重复, list不禁止:也是至关重要的区别。 (可以在collections.Counter找到“多重集”,该集合将重复项映射到不止一次存在的项目的不同计数中dict如果出于某些奇怪的原因而无法导入collections ,则可以将其作为dict ,或者,在2.7之前的Python中,作为collections.defaultdict(int) ,使用项目作为键,并将相关值作为计数)。 在set检查值的隶属关系(或对于键来说是dict )非常快(花费一个恒定的短时间),而在列表中,它花费的时间与列表的平均和最坏情况下的长度成正比。 因此,如果您具有可散列的项目,则不关心顺序或重复项,并且想要快速进行成员资格检查,则set比list更好。 回答2 您是否只需要订购的物品序列? 找一个清单。 你只需要知道你是否已经有了一个特定的值,但不排序(你不需要存储复本)? 使用一套。
  • 如何从C#数组中删除重复项?(How do I remove duplicates from a C# array?)
    问题 我一直在使用C#中的string[]数组,该数组从函数调用中返回。 我可能会转换为Generic集合,但是我想知道是否有更好的方法可以做到这一点,可能是使用临时数组。 从C#数组中删除重复项的最佳方法是什么? 回答1 您可以使用LINQ查询来执行此操作: int[] s = { 1, 2, 3, 3, 4}; int[] q = s.Distinct().ToArray(); 回答2 这是HashSet <string>方法: public static string[] RemoveDuplicates(string[] s) { HashSet<string> set = new HashSet<string>(s); string[] result = new string[set.Count]; set.CopyTo(result); return result; } 不幸的是,此解决方案还需要.NET Framework 3.5或更高版本,因为直到该版本才添加HashSet。 您也可以使用array.Distinct(),这是LINQ的功能。 回答3 如果您需要对它进行排序,则可以实施一种排序,该操作还可以删除重复项。 然后用一块石头杀死两只鸟。 回答4 以下经过测试和有效的代码将从数组中删除重复项。 您必须包括System.Collections命名空间。
  • 如何使用列表理解从列表中删除重复项? [复制](How to remove duplicate items from a list using list comprehension? [duplicate])
    问题 这个问题已经在这里有了答案: 如何在保留订单的同时从列表中删除重复项? (32个答案) 4个月前关闭。 如何使用列表理解从列表中删除重复项? 我有以下代码: a = [1, 2, 3, 3, 5, 9, 6, 2, 8, 5, 2, 3, 5, 7, 3, 5, 8] b = [] b = [item for item in a if item not in b] 但它不起作用,只会产生相同的列表。 为什么产生相同的清单? 回答1 它会生成与b相同的列表,并且在运行时不包含任何元素。 您想要的是什么: >>> a = [1, 2, 3, 3, 5, 9, 6, 2, 8, 5, 2, 3, 5, 7, 3, 5, 8] >>> b = [] >>> [b.append(item) for item in a if item not in b] [None, None, None, None, None, None, None, None] >>> b [1, 2, 3, 5, 9, 6, 8, 7] 回答2 如果您不介意使用与列表理解不同的技术,则可以为此使用一个集合: >>> a = [1, 2, 3, 3, 5, 9, 6, 2, 8, 5, 2, 3, 5, 7, 3, 5, 8] >>> b = list(set(a)) >>> print b [1, 2, 3, 5
  • 检查字典中是否存在项目并将其从 C# 中的字典中删除 [重复](Check if an item exist in the dictionary and remove it from the dictionary in C# [duplicate])
    问题 这个问题在这里已经有了答案: 根据值删除字典中的项目(6 个回答) 7年前关闭。 这个问题应该从标题本身就很清楚。 我需要检查字典中是否存在某个项目并将其从 C# 中的字典中删除。 唯一的问题是我必须仅使用值项而不是键来执行此操作。 声明如下: IDictionary<string, myCustomClassObject> clients = new IDictionary<string, myCustomClassObject>(); 现在我填写字典: clients["key"] = myCustomClassObject1; 现在我如何从我的字典中找到并删除这个项目myCustomClassObject1 。 我只想使用值项而不是键 这是doabale ......如果是这样,请指导......问候 编辑:谢谢大家......得到了宝贵的意见......可能有一些想法要做......谢谢 回答1 这取决于您需要它如何执行。 如果您可以接受O(N)性能,您可以执行以下操作: foreach(var pair in clients) { if(pair.Value == expected) { clients.Remove(pair.Key); break; } } 但是,如果您需要更快,则需要两本词典——一个与另一个相反(即由实例键控)。 所以在添加时,你会这样做:
  • 使用 Python 删除对象列表中的重复项(Remove duplicates in list of object with Python)
    问题 我有一个对象列表,我有一个充满记录的数据库表。 我的对象列表有一个 title 属性,我想从列表中删除任何具有重复标题的对象(保留原来的)。 然后我想检查我的对象列表是否与数据库中的任何记录有任何重复,如果有,请在将它们添加到数据库之前从列表中删除这些项目。 我见过从这样的列表中删除重复项的解决方案: myList = list(set(myList)) ,但我不确定如何使用对象列表来做到这一点? 我也需要维护我的对象列表的顺序。 我也在想也许我可以使用difflib来检查标题的差异。 回答1 set(list_of_objects)只会在您知道重复项是什么时才删除重复项,也就是说,您需要定义对象的唯一性。 为此,您需要使对象可散列。 您需要同时定义__hash__和__eq__方法,方法如下: http://docs.python.org/glossary.html#term-hashable 不过,您可能只需要定义__eq__方法。 编辑:如何实现__eq__方法: 正如我提到的,您需要知道对象的唯一性定义。 假设我们有一本书的属性 author_name 和 title 它们的组合是唯一的,(所以,我们可以有很多史蒂芬金的书,很多书叫闪灵,但只有一本斯蒂芬金的书叫闪灵),那么实现如下: def __eq__(self, other): return self
  • 删除列表中的重复项,同时保持其顺序(Python)(Remove duplicates in a list while keeping its order (Python))
    问题 这实际上是这个问题的延伸。 删除重复项后,该问题的答案未保留列表的“顺序”。 如何在列表中删除这些重复项(Python) biglist = [ {'title':'U2 Band','link':'u2.com'}, {'title':'Live Concert by U2','link':'u2.com'}, {'title':'ABC Station','link':'abc.com'} ] 在这种情况下,应该删除第二个元素,因为先前的“ u2.com”元素已经存在。 但是,应保留顺序。 回答1 我对另一个问题的答案(您完全忽略了它!)表明您在声称以下观点时是错误的 该问题的答案未保留“顺序” 我的回答确实保持秩序,并且明确表示确实如此。 这又是一次,更加着重于您是否可以继续忽略它……: 如果要保留其余项目的确切顺序,那么对于一个很大的列表来说,最快的方法可能是......: biglist = [ {'title':'U2 Band','link':'u2.com'}, {'title':'ABC Station','link':'abc.com'}, {'title':'Live Concert by U2','link':'u2.com'} ] known_links = set() newlist = [] for d in biglist: link = d[
  • 从列表中删除重复的和原始的(Remove duplicates and original from list)
    问题 给定一个字符串列表,我想删除重复的单词和原始单词。 例如: lst = ['a', 'b', 'c', 'c', 'c', 'd', 'e', 'e'] 输出应删除重复项,因此类似['a', 'b', 'd'] 我不需要保留订单。 回答1 使用collections.Counter()对象,然后仅保留计数为1的那些值: from collections import counter [k for k, v in Counter(lst).items() if v == 1] 这是一个O(N)算法; 您只需要遍历N个项目的列表一次,然后在较少项目(<N)上进行第二次循环以提取仅出现一次的那些值。 如果顺序很重要,并且您使用的是Python <3.6,请分别执行以下步骤: counts = Counter(lst) [k for k in lst if counts[k] == 1] 演示: >>> from collections import Counter >>> lst = ['a', 'b', 'c', 'c', 'c', 'd', 'e', 'e'] >>> [k for k, v in Counter(lst).items() if v == 1] ['a', 'b', 'd'] >>> counts = Counter(lst) >>> [k for k in
  • 如果键存在,则删除字典项[重复](Delete a dictionary item if the key exists [duplicate])
    问题 这个问题已经在这里有了答案: 如何从Python字典中删除键? (13个回答) 6年前关闭。 仅在给定键存在的情况下,是否还有其他方法可以删除字典中的项目,除了: if key in mydict: del mydict[key] 场景是给我一个要从给定字典中删除的键的集合,但是我不确定它们是否都存在于字典中。 万一我错过了一个更有效的解决方案。 回答1 您可以使用dict.pop: mydict.pop("key", None) 请注意,如果没有提供第二个参数,即None ,则如果键不在字典中,则会引发KeyError 。 提供第二个参数可防止条件异常。 回答2 还有: try: del mydict[key] except KeyError: pass 这只会执行1次查找,而不是2次查找。但是, except子句非常昂贵,因此,如果您最终频繁击中except子句,则效率可能会比现有的要低。 回答3 方法:计算要删除的键,对字典进行变异 让我们将keys称为您要删除的keys的列表/迭代器。 我会这样做: keys_to_remove = set(keys).intersection(set(mydict.keys())) for key in keys_to_remove: del mydict[key] 您可以预先计算所有受影响的项目并对其进行操作。 方法
  • 列表 元组 集合字典区别与函数用法
    理解Python中列表,元组,字典,集合的区别 列表,元组,字典,集合的区别是python面试中最常见的一个问题。这个问题虽然很基础,但确实能反映出面试者的基础水平。 1.列表(List) 什么是列表呢?我觉得列表就是我们日常生活中经常见到的清单。比如,统计过去一周我们买过的东西,把这些东西列出来,就是清单。 由于我们买一种东西可能不止一次,所以清单中是允许有重复项的。如果我们扩大清单的范围,统计我们过去一周所有的花费情况, 那么这也是一个清单,但这个清单里会有类别不同的项,比如我们买东西是一种花费,交水电费也是一种花费,这些项的类型是可以使不同的。 python的列表个跟清单的道理是一样的,特点就是:可重复,类型可不同。类型不同也是跟数组最本质的区别了。python里的列表用“[]”表示。 #定义一个列表 listA = [‘a’, ‘b’, ‘c’, 1, 2] listA[1] # ‘b’ 向 list 中增加元素 1.使用append 向list 的末尾追加单个元素。(把列表当做堆栈使用——后进(后出)) #listA = [‘a’, ‘b’, ‘c’, 1, 2, 3] listA.append(3) 2.使用 insert 将单个元素插入到list 中。数值参数是插入点的索引 在下标为3处插入一个元素,listA = [‘a’, ‘b’, ‘c’, ‘d’, 1, 2
  • Python3---列表、字典、集合
    文章目录 前言Python3 列表创建列表、空列表更新列表合并列表删除列表元素列表截取Python列表操作的函数和方法列表操作包含以下函数:列表操作包含以下方法: 二维列表的创建与访问 Python3 字典修改字典删除字典以及元素字典的特性字典内置函数&方法Python3字典包含了以下内置函数:Python3字典包含了以下内置方法 Python3 集合添加操作集合内置方法完整列表 前言 序列是Python中最基本的数据结构。序列中的每个元素都分配一个数字即它的位置,或者称之为索引,有关索引在我的博客中讲过,它可以用切片来操作。 这里再简单赘述一下,假设字符长度为n,从第一位到最后一位的切片是: 第一种方式:0,1,2,3…n-2,n-1 第二种方式:-n,-n+1,…,-2,-1 依次类推。 Python2/3中有6个内置类型,但最常见的是列表和元组。 序列都可以进行的操作包括索引,切片,加,乘,检查成员。 此外,Python还确定了序列的长度以及确定最大最小值的元素方法。 Python3 列表 列表是最常用的Python数据类型,它可以作为一个方括号内的分隔值出现。 列表的数据项数据不需要具有相同的类型. 创建列表、空列表 更新列表 合并列表 append():追加元素extend():再原有列表的基础上追加列表+ :两个列表合并成一个新的列表+=:效果与extend()一样*
  • Python-唯一词典列表(Python - List of unique dictionaries)
    问题 假设我有一个字典列表: [ {'id': 1, 'name': 'john', 'age': 34}, {'id': 1, 'name': 'john', 'age': 34}, {'id': 2, 'name': 'hanna', 'age': 30}, ] 并且我需要获取唯一字典的列表(删除重复项): [ {'id': 1, 'name': 'john', 'age': 34}, {'id': 2, 'name': 'hanna', 'age': 30}, ] 谁能以最有效的方式帮助我在Python中实现这一目标? 回答1 因此,以键为id临时决定。 这将滤除重复项。 字典的values()将是列表 在Python2.7中 >>> L=[ ... {'id':1,'name':'john', 'age':34}, ... {'id':1,'name':'john', 'age':34}, ... {'id':2,'name':'hanna', 'age':30}, ... ] >>> {v['id']:v for v in L}.values() [{'age': 34, 'id': 1, 'name': 'john'}, {'age': 30, 'id': 2, 'name': 'hanna'}] 在Python3中 >>> L=[ ... {'id':1,'name'
  • 从字典数组中删除键值的重复项(Removing duplicates of a key value from an array of dictionaries)
    问题 我正在执行 Facebook API 请求,以将特定 Facebook 群组中的所有专辑名称归还给我。 我得到一个包含 3 个键/值的字典数组,其中一个是映射到专辑名称的键 'name',以及键 'id' 和 'created_time'。 唯一的问题是,出于某种原因,我取回了专辑的重复“名称”值……但只有几个。 当我去 Facebook 页面时,无论如何都只有一张专辑,没有重复。 此外,它们的“id”值是不同的,但它只是重复组中的第一个字典,它具有实际指向有效数据的 Facebook id,其他 Facebook id 值在您执行 Facebook 图形时不会返回任何内容与他们一起搜索,所以这是我想要的第一个副本。 我怎样才能从我的数组中删除这些无用的重复字典并保留一个具有有效 Facebook id 的字典? 谢谢! :) 回答1 首先,我想说,与事后掩盖问题相比,找到一种从 faceBook 获取“干净”列表的方法可能更有益。 这现在可能是不可能的,但至少要找出这种行为的原因或提交错误报告。 除此之外,这应该可以解决问题: -(NSMutableArray *) groupsWithDuplicatesRemoved:(NSArray *) groups { NSMutableArray * groupsFiltered = [[NSMutableArray alloc
  • gVim 中的正则表达式从列表中删除重复域(Regular Expression in gVim to Remove Duplicate Domains from a List)
    问题 我需要一个编写在 gVim 中使用的正则表达式,它将从 URL 列表中删除重复的域(gVim 可以在这里下载:http://www.vim.org/download.php 我有一个 .txt 文件(在 gVim 中打开以进行编辑)中包含超过 6,000,000 个 URL 的列表。 URL 格式如下: http://www.example.com/some-url.php http://example2.com/another_url.html http://example3.com/ http://www.example4.com/anotherURL.htm http://www.example.com/some-url2.htm http://example.com/some-url3.html http://www.example2.com/somethingelse.php http://example5.com 换句话说,URL 没有特定的格式。 有些有 WWW,有些没有,它们都有不同的格式。 我需要一个为 gVim 编写的正则表达式,它将从列表(及其对应的 URL)中删除所有重复的域,留下它找到的第一个实例。 因此,它将采用上面发布的示例列表,最终结果应如下所示: http://www.example.com/some-url.php http:/