Retrieve dictionary elements based on order - python-2.7

Example creation of Dictionary: Dictionary processes Elements in arbitrary fashion. Hence I get the output in mixed order which doesnt correlate with my list x.
x = [100,2,300,4,75]
dct = {}
for i in x:
dct['lst_%s' % i] = []
for z in range(0,5):
dct['lst_%s' % i].extend((x[z],x[z-1]))
print(dct)
{'lst_300': [100, 75, 2, 100, 300, 2, 4, 300, 75, 4], 'lst_75': [100, 75, 2, 100, 300, 2, 4, 300, 75, 4], 'lst_100': [100, 75, 2, 100, 300, 2, 4, 300, 75, 4], 'lst_2': [100, 75, 2, 100, 300, 2, 4, 300, 75, 4], 'lst_4': [100, 75, 2, 100, 300, 2, 4, 300, 75, 4]}
Using sorted key I do get dictionary headers in order corresponding to my list x but how can I retrieve the elements for the same ?
x = [100,2,300,4,75]
dct = {}
for i in x:
dct['lst_%s' % i] = []
for z in range(0,5):
dct['lst_%s' % i].extend((x[z],x[z-1]))
print(sorted(dct))
['lst_100', 'lst_2', 'lst_300', 'lst_4', 'lst_75']

dict is unordered by definition. If you really want an ordered map, use collections.OrderedDict

Related

Flutter and Dart - how can I copy only a Item from a list and add this Item to another list?

Hi I am trying to copy only one item from a list into another list.
Example 1:
listFinalDevices = listDevices.map((index) => index).toList();
works a bit, but this overwrites the listFinalDevice every time, I need to add the selected Item from the listDevice. As a kind of favorite device list.
Example 2:
listFinalDevices.insertAll(listFinalDevices.length,listDevices.map((index) => index).toList());
This copy the complete list but I need only the over index referenced item.
Can someone give me a link to an example or what are the keywords for what I have to search.
UPDADTE:
To make it more clearer, currently I have the following data in the list named listDevices:
[ScanResult{device: BluetoothDevice{id: 4D:55:F7:CE:03:FA, name: , type: BluetoothDeviceType.unknown, isDiscoveringServices: false, _services: [], advertisementData: AdvertisementData{localName: , txPowerLevel: null, connectable: true, manufacturerData: {}, serviceData: {0000fd6f-0000-1000-8000-00805f9b34fb: [215, 226, 39, 186, 231, 145, 9, 162, 217, 184, 33, 163, 133, 92, 23, 221, 40, 117, 217, 176]}, serviceUuids: [0000fd6f-0000-1000-8000-00805f9b34fb]}, rssi: -65}, ScanResult{device: BluetoothDevice{id: 00:80:E1:21:C4:B5, name: P2PSRV1, type: BluetoothDeviceType.le, isDiscoveringServices: false, _services: [], advertisementData: AdvertisementData{localName: P2PSRV1, txPowerLevel: null, connectable: true, manufacturerData: {33537: [0, 0, 32, 0, 0, 128, 225, 33, 196, 181]}, serviceData: {}, serviceUuids: []}, rssi: -35}, ScanResult{device: BluetoothDevice{id: 60:29:4D:9B:AC:52, name: , type: BluetoothDeviceType.unknown, isDiscoveringServices: false, _services: [], advertisementData: Adver
The target is, that I chose some Devices and put this to a kind of favorite list which should named with listFinalDevices:
[ScanResult{device: BluetoothDevice{id: 00:80:E1:21:C4:B5, name: P2PSRV1, type: BluetoothDeviceType.le, isDiscoveringServices: false, _services: [], advertisementData: AdvertisementData{localName: P2PSRV1, txPowerLevel: null, connectable: true, manufacturerData: {33537: [0, 0, 32, 0, 0, 128, 225, 33, 196, 181]}, serviceData: {}, serviceUuids: []}, rssi: -35}, ScanResult{device: BluetoothDevice{id: C5:9F:97:96:4A:A9, name: MX Anywhere 2S, type: BluetoothDeviceType.le, isDiscoveringServices: false, _services: [], advertisementData: AdvertisementData{localName: MX Anywhere 2S, txPowerLevel: 4, connectable: false, manufacturerData: {}, serviceData: {}, serviceUuids: [00001812-0000-1000-8000-00805f9b34fb]}, rssi: -50}] is not empty
listFinalDevices.add(listDevices[index])
Could you be clearer? You wanted to add object at index from another list to final list, right?
or maybe:
listFinalDevices.add(listDevices[listDevices.indexWhere((el) => el == index)])

How to add a condition to an image pixel call? numpy opencv

I feel like there should be an easy way to do this but I can not find a solution online. I'm looking for a one liner something pythonic.
I know you can do this:
Img[:,:,2]=200
but how can you add a condition to this?
if Img[:,:,2]<=100: 200
or
image =[i==100 for i in Img[:,:,2] if i <= 100]
Thanks
To simulate if a[:,:,2]<=100: 200, we can use np.where -
a[:,:,2] = np.where(a[:,:,2] <= 100, 200, a[:,:,2])
Or simply use the mask to assign -
a[a[:,:,2] <= 100,2] = 200
Sample run -
In [379]: a
Out[379]:
array([[[ 78, 134, 7],
[154, 37, 146],
[ 39, 95, 13]],
[[114, 138, 100],
[175, 198, 148],
[ 39, 130, 37]]])
In [380]: a[a[:,:,2] <= 100,2] = 200
In [381]: a
Out[381]:
array([[[ 78, 134, 200],
[154, 37, 146],
[ 39, 95, 200]],
[[114, 138, 200],
[175, 198, 148],
[ 39, 130, 200]]])

What is timeline_like_chaining in the Facebook Graph API?

Here is part of the json I get back:
"value": {
"page_suggestions_on_liking": 2,
"engagement_pyml": 44,
"page_browser": 30,
"outbound_click_chaining": 18,
"feed_story": 11,
"mobile_page_browser": 56,
"wap": 1,
"comment_chaining": 71,
"mobile": 25,
"page_finch_related_pages": 1,
"feed_pyml": 121,
"page_timeline": 2,
"search": 5,
"page_profile": 24,
"pagelike_adder_for_reactivated_users": 18,
"timeline_collection": 6,
"launch_point_home_pyml": 5,
"sponsored_story": 2,
"feed_chaining": 57,
"mobile_page_suggestions_on_liking": 8,
"timeline_like_chaining": 135,
"api": 14,
"all_category_pyml": 38,
"launch_point_discover_pyml": 13
},
What is timeline_like_chaining and how is it different from feed_chaining?
The "timeline_like_chaining" metric refers to a user liking your page when your page was suggested after they liked a similar page. (source: https://developers.facebook.com/bugs/1504548336228785/)
"feed_chaining" - People who liked your Page after Facebook automatically suggested a story about a friend liking your page.(source: https://developers.facebook.com/docs/graph-api/reference/v2.8/insights)

Compare tuple values in Two lists

**for i in range(a):
p=int(raw_input("Enter Elements in List1:"))
list1.append(p)
d1=defaultdict(int)
for item in list1:
d1[item]+=1
print list1
print d1.items()
print ""**
How to compare tuple values in the following list output?
Here my answer should return the tuple values (207,2), (208,1) and (209,1) because those are same in both the lists.
input1 : [203, 203, 204, 204, 205, 206, 207, 208, 207, 209]
output1: [(203, 2), (204, 2), (205, 1), (206, 1), (207, 2), (208, 1), (209, 1)]
input2: [204, 203, 205, 205, 206, 206, 207, 207, 208, 209, 205, 206, 205]
output2: [(203, 1), (204, 1), (205, 4), (206, 3), (207, 2), (208, 1), (209, 1)]
You can use Counter
>>> from collections import Counter
>>> lst = [203, 203, 204, 204, 205, 206, 207, 208, 207, 209]
>>> freqs = Counter(lst)
>>> freqs
Counter({203: 2, 204: 2, 207: 2, 205: 1, 206: 1, 208: 1, 209: 1})
>>> lst2 = [204, 203, 205, 205, 206, 206, 207, 207, 208, 209, 205, 206, 205]
>>> Counter(lst2)
Counter({205: 4, 206: 3, 207: 2, 203: 1, 204: 1, 208: 1, 209: 1})
First compare method:
>>> [ k for k,v in Counter(lst2).iteritems() if v == Counter(lst)[k] ]
[207, 208, 209]
Second compare method:
>>> for k,v in Counter(lst2).iteritems():
... if v == Counter(lst)[k]:
... print k
...
207
208
209

groovy sublist removal

I have a list:
def clc = [[1, 15, 30, 42, 48, 100], [58, 99], [16, 61, 85, 96, 98], [2, 63, 84, 90, 91, 97], [16, 61, 85, 96], [23, 54, 65, 95], [16, 29, 83, 94], [0, 31, 42, 93], [33, 40, 51, 56, 61, 62, 64, 89, 92], [0, 63, 84, 90, 91]]
and a sublist
def subclc = [[1, 15, 30, 42, 48, 100], [58, 99], [16, 61, 85, 96, 98], [2, 63, 84, 90, 91, 97]]
I need to remove sublist from original list
I do so:
subclc.each{
clc.remove(it)
}
but it throws an exceprion Exception in thread "main" java.util.ConcurrentModificationException
I do not understand where is problem and how to solve the problem
Short answers:
For more groovyness and immutability, preserving the original list:
def removed = clc - subclc
assert removed == [[16, 61, 85, 96], [23, 54, 65, 95], [16, 29, 83, 94], [0, 31, 42, 93], [33, 40, 51, 56, 61, 62, 64, 89, 92], [0, 63, 84, 90, 91]]
And the java way, changing the original list:
clc.removeAll subclc
assert clc == [[16, 61, 85, 96], [23, 54, 65, 95], [16, 29, 83, 94], [0, 31, 42, 93], [33, 40, 51, 56, 61, 62, 64, 89, 92], [0, 63, 84, 90, 91]]
Long answer:
You are Iterator-ing through a list while changing the list. In this case you are better using Iterator.remove(), which is being abstracted by the foreach loop.
When you change the list using the foreach loop, you bump into the iterator checks for modification using checkForComodification(). Getting the iterator explicitly works:
list1 = [10,20,30,40,50,60,70,80,90]
list2 = [50,60,80]
def iter = list1.iterator()
while (iter.hasNext()) {
def item = iter.next()
if (list2.contains(item)) iter.remove()
}
assert list1 == [10,20,30,40,70,90]
Or you can use indexes. Note you need to control the index:
list1 = [10,20,30,40,50,60,70,80,90]
list2 = [50,60,80]
for (int i = 0; i < list1.size(); i++) {
def item = list1[i]
if (list2.contains(item)) { list1.remove i-- }
}
assert list1 == [10,20,30,40,70,90]