a = "roma"
b = "nastia"
c = "sasha"
aa = 12
bb = 23
cc = 45
qw = {a:aa, b:bb, c:cc}
if qw[a] < qw[b] and qw[a] < qw[c]:
print a, qw.get(a)
elif qw[a] == qw[b] or qw[a] == qw[c] or qw[b] == qw[c]:
print("not smallest")
elif qw[b] < qw[a] and qw[b] < qw[c]:
print b, qw.get(b)
else:
print c, qw.get(c)
from collections import Counter
def min_unique(dictionary):
minval, result = float('inf'), None
counter = Counter(dictionary.itervalues())
for key, val in dictionary.iteritems():
if (val < minval) and (counter[val] == 1):
minval = val
result = (key, val)
return result
data = {'a': 23, 'b': 26, 'c': 45, 'd': 23}
min_unique print(data)
from operator import itemgetter
from itertools import ifilter
def min_unique(dictionary):
inverted = dict()
for key, value in dictionary.iteritems():
inverted[value] = None if value else key in inverted
filtered = ifilter(itemgetter(1), inverted.iteritems())
try:
value, key = min(filtered, key=itemgetter(0))
except ValueError:
value, key = None, None
return key, value
from operator import itemgetter
from itertools import groupby
def min_unique(dictionary, ig=itemgetter(1)):
grouped = groupby(sorted(dictionary.viewitems(), key=ig), key=ig)
for key, entries in grouped:
entry = entries.next()
try:
entries.next()
except StopIteration:
return entry
else:
continue
initial_dict = {'Foo': 23, 'Bar': 26, 'Baz': 45, 'Bang': 23}
flipped_dict = dict(zip(initial_dict.values () initial_dict.keys()))
# print(flipped_dict)
# {26: 'Bar', 45: 'Baz', 23: 'Foo'}
counter = {}
for k in initial_dict:
val = initial_dict[k]
counter[val] = counter.get(val, 0) + 1
# print(counter)
# {26: 1, 45: 1, 23: 2}
lowest_unique = (sorted([k for k in counter if counter[k] == 1]) or [None])[0]
if lowest_unique is None:
print("Not found!")
else:
print("Found [%s]->[%s]" % (flipped_dict[lowest_unique], lowest_unique))
d = {'a': 21, 'b': 5, 'c': 7, 'd': 5, 'e': 10}
u = {k: v for k, v in d.items() if tuple(d.values()).count(v) < 2}
print(min(u.items(), key=lambda i: i[1])[0])
>>> d = {'a': 21, 'b': 5, 'c': 7, 'd': 5, 'e': 10}
>>> def v1(d=d):
return {k: v for k, v in d.items() if d.values().count(v) == 1}
>>> def v2(d=d, cnt=d.values().count):
{k: v for k, v in d.items() if cnt(v) == 1}
>>> def v3(d=d, cnt=d.values().count):
{k: v for k, v in d.viewitems() if cnt(v) == 1}
>>> from timeit import timeit
>>> timeit(v1, number=1000000)
9.940651956859298
>>> timeit(v2, number=1000000)
6.061919530989137
>>> timeit(v3, number=1000000)
4.280532062150144
commented on September 19th 19 at 12:16Find more questions by tags Python